
Andrew Coppin wrote:
Oh, I don't mind not knowing how rank-2 types are *implemented*. ;-) But it would be nice to know what they *are*... :-S
(Thus far, they just seem to be some incomprehensible syntax that makes the compiler stop complaining. In particular, I have no idea what the difference between rank-2, rank-N and existentially quantified is...)
Most Haskell extensions are more like restriction removals from a application programmer's point of view. If you are fully ignorant of the matter and never realized there was a restriction, you have no reason to fear the removal of the restriction, since it enables you to stay ignorant of the matter. All you have to do is to pass some flag to the compiler for historical reasons. (Ok, there is the question of portability to other compilers...) The idea about higher-ranked types is to allow explicit forall keywords in types wherever you like. The restriction about rank-1-types is to disallow forall keywords almost everywhere. So higher-ranked types aren't a edge-case extension, they are a sensible lifting of some edge-case restriction. (Of course, for compiler writers and the like, lifting this restrictions means extending the type system and underlying theory. But why should you care?) So instead of learning about higher-ranked types, I would learn about the forall keyword, getting higher-ranked types for free, by using it in some former illegal positions out of ignorance of the former restriction. Most programming language extensions seem to arise like this: Wouldn't it be nice if I could write this and it would mean that. Maybe if I steal something from category theory, it could be possible... Tillmann