ConstraintKinds and default associated empty constraints
Andres Löh
andres.loeh at googlemail.com
Mon Jan 9 08:28:21 CET 2012
Hi.
> The definitions are accepted by GHC:
>
> class Functor f where
> type FC f a :: Constraint
> type FC f a = ()
>
> fmap :: (FC f a, FC f b) => (a -> b) -> f a -> f b
>
> instance Functor [] where
> fmap = map
Yes. This is what I would have expected to work.
> But I don't like the 'a' being an index parameter, and then the
> following expression:
>
> fmap (+1) [1::Int]
>
> Gives the error:
>
> Could not deduce (FC [] Int) arising from a use of `fmap'
> In the expression: fmap (+ 1) [1 :: Int]
> In an equation for `it': it = fmap (+ 1) [1 :: Int]
>
>> gives the error:
>>
>> Number of parameters must match family declaration; expected 1
>> In the type synonym instance default declaration for `FC'
>> In the class declaration for `Functor'
I get the same error, but it looks like a bug to me: If I move the
declaration
type FC f a = ()
to the instance, then the example passes.
Cheers,
Andres
More information about the Glasgow-haskell-users
mailing list