John Meacham wrote:
interestingly enough, the monomorphism restriction in jhc actually
should apply to all polymorphic values, independently of the type class
system.
x :: a
x = x
will transform into something that takes a type parameter and is hence
not shared.
Interesting. I'd been wondering how you dealt with this case, and now it
turns out that you don't. :-)
I doubt this will cause a problem in practice since there
arn't really any useful values of type forall a . a other than bottom.
It could become an issue with something like
churchNumerals :: [(a -> a) -> (a -> a)]
churchNumerals = ...
Maybe you could use a worker-wrapper transformation.
churchNumerals' :: [(T -> T) -> (T -> T)]
churchNumerals' = ...
churchNumerals :: [(a -> a) -> (a -> a)]
churchNumerals = /\ a . unsafeCoerce churchNumerals'
The unsafeCoerce is scary, but it feels right to me. There is something
genuinely unsavory about this kind of sharing, in Haskell or any other ML
dialect. At least here it's out in the open.
-- Ben
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime