On Mar 9, 2010, at 5:26 AM, Simon Peyton-Jones wrote: > ... > Stephanie Weirich, Steve Zdancewic, Dimitrios Vytiniotis and I have been > working hard on a development of the FC intermediate language, and hence of > the source language, that will close this (embarrassing) loophole, and allow > some new expressiveness. Nothing written down in a form that someone other > than us can make sense of, but there will be! In brief, though, we're going > to end up with kinds looking like > * => * > as well as the existing > * -> * > The new form means "a type-indexed function" whereas the latter means "a > type-parametric function". > > John Meacham's example is also very interesting. Even if the data type > doesn't use type functions, it might have invariants concerning type classes > (his example is Set), and converting all the elements might destroy the > invariants. Excellent point! There's no type-soundness issue (no run-time > seg fault) but something nearly as bad. Will have to think about that. > Probably declaring Set to have kind (* => *) will do the job.
It occurs to me to observe: if we give class constraints in data types some force, and write: data Ord a => Set a = ...[internals go here]... Would this be enough to cue us that Set has a more interesting kind than just * -> * ? -Jan-Willem Maessen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe