[Haskell-cafe] Haskell and the Software design process

aditya siram aditya.siram at gmail.com
Mon May 3 00:31:25 EDT 2010


Cool. That makes way more sense.

I thought that ghc -Wall picked these up. So at least this problem
would go away if warnings were turned on (and heeded) by default.

Besides that from my own experience I'd strongly encourage people to
use HLint [1] .

-deech

[1 ] http://hackage.haskell.org/package/hlint

On 5/3/10, Ivan Miljenovic <ivan.miljenovic at gmail.com> wrote:
> 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