[Haskell-cafe] type versus data declarations

Emilio Jesús Gallego Arias egallego at babel.ls.fi.upm.es
Thu Jun 7 14:03:30 EDT 2007


I'm wondering why you can write

> data FSet a = Show a => M (a -> Double)
> a :: FSet Double
> a = M $ \x -> 0

and it works, but

> type FSet a = Show a => (a -> Double)
> a :: FSet Double
> a _ = 0

fails with

> All of the type variables in the constraint `Show a' are already in scope
>    (at least one must be universally quantified here)
> In the type synonym declaration for `FSet'

If I understood the GHC manual, this should work, as FSet a should be
replaced in a, so a type signature would come:

> a :: Show a => (a -> Double)

which is OK.

Sorry if this is FAQ, but I did some searches and nothing came out.

Thanks in advance,


More information about the Haskell-Cafe mailing list