[Haskell-cafe] (+) on two lists ?

Raphael Gaschignard dasuraga at gmail.com
Fri Feb 15 09:22:30 CET 2013


Out of curiosity, what is the rationale for allowing programs to infer
certain types, but not for the (inferred) type to be declared?



On Fri, Feb 15, 2013 at 4:54 PM, David McBride <toad3k at gmail.com> wrote:

> sum' [] = []  -- returns a list of something the way you intended
> sum' (x:xs) = x + xum' xs -- you intended it not to return a list but it
> could if you think about it.
>
> The compiler says I think returns a list based on what I see so far, well
> if you can add these together then the only way you could get a list from
> that is if you were adding two lists together ie (+ l1 l2) :: [a] -> [a] ->
> [a].  That works if we assume that sum' must have accepted [[a]] and
> returned [a].
>
> But in order for that to be the case [a] must be an instance of Num,
> otherwise they couldn't be added together like that, so tack on a Num [a]
> requirement on.
>
> But having a typeclass of the form [a] that requires an extension,
> FlexibleContexts, which you can read about here:
> http://www.haskell.org/ghc/docs/7.0.2/html/users_guide/other-type-extensions.html#flexible-contexts
>
> On Fri, Feb 15, 2013 at 2:33 AM, sheng chen <kkchensheng at gmail.com> wrote:
>
>> Hi,
>>
>> I was puzzled by the following little program.
>>
>> sum' [] = []
>> sum' (x:xs) = x + sum' xs
>>
>> I thought the GHC type checker will report a type error. However, the
>> type checker accepts this program and gives the type
>>
>> Num [a] => [[a]] -> [a]
>>
>> When I add type annotation to the program
>>
>> sum' :: Num [a] => [[a]] -> [a]
>> sum' [] = []
>> sum' (x:xs) = x + sum' xs
>>
>> The GHC asks me to add FlexibleContexts language extension.
>>
>> I would appreciate explanation on this issue.
>>
>> Thanks,
>> Sheng
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130215/8cf2fd89/attachment.htm>


More information about the Haskell-Cafe mailing list