This may well be stupidity on my side, but some experiments with multi parameter type classes got me slightly confused. Can somebody explain the following behaviour to me?

  class D a b where fd :: a -> b -> ()

  d1 x = let p = fd x in ()
  d2 x = let p y = fd x y in ()

GHC derives the following types:

  d1 :: D a b => a -> ()
  d2 :: a -> ()

Hugs rejects d1 on the grounds that the type is ambiguous, but agrees on the type of d2. I do not understand where the context disappears to in this example - in particular, when I compare with the single parameter case:

  class C a where fc :: a -> a -> ()

  c1 x = let p = fc x in ()
  c2 x = let p y = fc x y in ()

where

  c1 :: C a => a -> ()
  c2 :: C a => a -> ()

is inferred, as I would expect.

--
Andreas Rossberg, [EMAIL PROTECTED]

Let's get rid of those possible thingies!  -- TB

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

Reply via email to