Hi,

This is a change in behavior. Previously GHC was more liberal than Haskell 98 prescribed, and would not default the kind of otherwise unconstrained type variables to *. 7.4 does default to *, so you have to provide kind signatures when you want another kind (particularly in phantom type variables).


Cheers,
Pedro

On Tue, Dec 27, 2011 at 16:47, Bas van Dijk <v.dijk.bas@gmail.com> wrote:
On 27 December 2011 17:38, Michael Snoyman <michael@snoyman.com> wrote:
> Thanks to Mark Wright for pointing this out[1].
>
> We have the equivalent of the following code in persistent:
>
> {-# LANGUAGE MultiParamTypeClasses #-}
> data Key backend entity = Key
>
> class Monad (b m) => Foo b m where
>    func :: b m (Key b m)
>
> This code works fine with GHC 7.0, but I get the following message from GHC 7.4:
>
>    Expecting two more arguments to `b'
>    In the type `b m (Key b m)'
>    In the class declaration for `Foo'
>
> Is this expected behavior, or a bug? If the former, what would be a
> possible workaround?
>
> Thanks,
> Michael
>
> [1] https://github.com/yesodweb/persistent/issues/31
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

I fixed a similar breakage in the hmatrix library:

https://github.com/AlbertoRuiz/hmatrix/commit/a4f38eb196209436f72b938f6355f6e28474bef3

I don't know if it's a bug in GHC, but the workaround is to add an
explicit kind signature:

{-# LANGUAGE KindSignatures, MultiParamTypeClasses #-}
data Key (backend :: * -> * -> *) entity = Key

class Monad (b m) => Foo b m where
  func :: b m (Key b m)

Cheers,

Bas

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe