[Haskell-cafe] Monad transformer responsibilities
Claus Reinke
claus.reinke at talk21.com
Fri Jun 5 09:02:15 EDT 2009
| bar :: (C T) => T
| *Main> :t bar
|
| <interactive>:1:0:
| No instance for (C T)
| arising from a use of `bar' at <interactive>:1:0-2
| Possible fix: add an instance declaration for (C T)
| In the expression: bar
I'm not sure where that comes from, but it does seem to be an
artifact of GHC's type inference, which seems unwilling to infer
a flexible context even if flexible contexts are enabled:
*Main> :show languages
active language flags:
-XImplicitPrelude
-XFlexibleContexts
*Main> let f _ = negate []
*Main> :t f
f :: (Num [a]) => t -> [a]
*Main> let f _ = negate [()]
<interactive>:1:10:
No instance for (Num [()])
arising from a use of `negate' at <interactive>:1:10-20
Possible fix: add an instance declaration for (Num [()])
In the expression: negate [()]
In the definition of `f': f _ = negate [()]
*Main> let f :: Num [()] => t -> [()]; f _ = negate [()]
*Main> :t f
<interactive>:1:0:
No instance for (Num [()])
arising from a use of `f' at <interactive>:1:0
Possible fix: add an instance declaration for (Num [()])
In the expression: f
This does look like a bug to me? Compare with Hugs (Hugs mode):
Main> :t let f _ = negate [] in f
let {...} in f :: Num [a] => b -> [a]
Main> :t let f _ = negate [()] in f
let {...} in f :: Num [()] => a -> [()]
Claus
More information about the Haskell-Cafe
mailing list