[Haskell-cafe] Haskell and the Software design process

Ivan Miljenovic ivan.miljenovic at gmail.com
Mon May 3 00:24:41 EDT 2010


On 3 May 2010 14:17, aditya siram <aditya.siram at gmail.com> wrote:
> I'm a little confused about this too. I've seen many functions defined like:
> f x = (\s -> ...)
> which is a partial function because it returns a function and is the same as:
> f x s = ...

No, that's a partially applied function.

A partial function is one such as:

secondElement (_:x:_) = x

Note that it is only defined for lists with at least two elements, for
any other list (i.e. singleton or empty) it will throw an error;
-fwarn-incomplete-patterns (which is included in -Wall) tells you
about these.

You can also argue that functions such as head are partial, as they
explicitly throw an error if the input data isn't correct.

Partial functions are bad because if you accidentally use one the
wrong way, your entire program crashes in a flaming wreck.  It's much
better to do something like this:

safeSecondElement (_:x:_) = Just x
safeSecondElement _         = Nothing

This will work with all possible input types.

For more information, see
http://en.wikipedia.org/wiki/Partial_function (from the mathematical
perspective).

-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list