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

Reply via email to