On 3 May 2010 14:17, aditya siram <aditya.siram@xxxxxxxxx> 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
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
Ivan Lazar Miljenovic
Haskell-Cafe mailing list