[Haskell-cafe] Haskell and the Software design process

aditya siram aditya.siram at gmail.com
Mon May 3 00:32:29 EDT 2010


I missed the part where you talked about -Wall. Sorry.

On 5/3/10, aditya siram <aditya.siram at gmail.com> wrote:
> 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