As i understand it, the monomorphism restriction applies to "constrained type variables", but c :: forall a. a, so it remains polymorphic and each of its uses can be instantiated to a different type.
2007/12/25, Henning Thielemann <[EMAIL PROTECTED]>: > > > I thought I understand monomorphism restriction. But it seems, I don't. I > have boilt down my problem to the following test. Don't try to make any > sense of it, it is just the smallest code I could come up with. > > > test :: (Integral a, RealFrac a) => a > test = > let c = undefined > in asTypeOf (round c) c > > > When compiling I get: > > Compiling StorableInstance ( src/StorableInstance.hs, interpreted ) > > src/StorableInstance.hs:38:17: > Warning: Defaulting the following constraint(s) to type `Double' > `RealFrac a' arising from use of `round' at > src/StorableInstance.hs:38:17-21 > In the first argument of `asTypeOf', namely `(round c)' > In the definition of `test1': test1 = let c = undefined in > asTypeOf (round c) c > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
