GADT confusion

Roman Cheplyaka roma at ro-che.info
Mon May 18 08:11:24 UTC 2015


On 18/05/15 10:57, Alan & Kim Zimmerman wrote:
> Hi all
> 
> I am working on D836 and have the following test case
> 
>     data MaybeDefault v where
>         SetTo4 :: forall v a. (( Eq v, Show v ) => v -> MaybeDefault v
> -> a -> MaybeDefault [a])
> 
> GHC 7.10.1 regards the return type of SetTo4 as `MaybeDefault [a]`
> 
> The question is, due to the parens, is the return type not the whole RHS?
> 
> i.e. Similar to how in the signature
> 
>     map :: (a -> b) -> [a] -> [b]
> 
> the first paramater is a single function.
> 
> I am sure I am just confused here.

This is the wrong analogy, since (a -> b) in map's type is in the
negative position.

The correct analogy would be the return type of

  map :: (a -> b) -> ([a] -> [b])

You could argue it both ways. (But only one of them leads to the above
declaration being correct, since the function type is not an instance of
MaybeDefault.)

Roman

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20150518/eb55347b/attachment.sig>


More information about the ghc-devs mailing list