
Ross Paterson wrote:
data T = forall a. MkT [a]
k :: T -> T k (forall a. MkT [t]) = MkT t3 where t3::[a] = [t,t,t]
What was wrong with the example in the documentation? k :: T -> T k (MkT [t::a]) = MkT t3 where t3::[a] = [t,t,t] The type of (t) is (a) - what could possibly be simpler? No doubt I'm missing something because the docs then go on to say "If this seems a little odd..." - but it doesn't. It makes perfect sense. Why shouldn't a pattern type signature introduce a scoped type variable? It also has the advantage that you can see what the type variable is supposed to represent without having to track down the original data declaration. Regards, Brian. -- Logic empowers us and Love gives us purpose. Yet still phantoms restless for eras long past, congealed in the present in unthought forms, strive mightily unseen to destroy us. http://www.metamilk.com