
On Tue, Apr 7, 2009 at 11:27 PM, Kannan Goundan
Here's my code (in file "Test.hs")
safeFromInteger :: (Num a, Integral a, Bounded a) => Integer -> Maybe a safeFromInteger i = if i > (toInteger maxBound) then Nothing else Just (fromInteger i)
Here's the error from GHCi 6.10.1:
Test.hs:3:19: Ambiguous type variable `a' in the constraints: `Bounded a' arising from a use of `maxBound' at Test.hs:3:19-26 `Integral a' arising from a use of `toInteger' at Test.hs:3:9-26 Probable fix: add a type signature that fixes these type variable(s)
It's almost like GHC thinks that the type variable "a" can't be part of the "Bounded" lass and the "Integeral" class.
That is not what it thinks. Ambiguous is not the same as conflicting (you could call them opposites: ambiguous means underconstrained, conflicting means overconstrained). The confusing thing here is that the `a' GHC is talking about is not the `a' in your code. The problem with your code is that the type of maxBound is unspecified. You need (maxBound `asTypeOf` i), or enable ScopedTypeVariables and use (maxBound :: a) (I think). --Max