On Tue, Apr 7, 2009 at 11:27 PM, Kannan Goundan <[email protected]> wrote: > 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 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
