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

Reply via email to