Jonathan Cast wrote:
On Thursday 05 July 2007, Andrew Coppin wrote:
...OK, anybody have a solution that works in Haskell 98?

Rank-2 types are perhaps /the/ most common, widely accepted extension to Haskell 98, after the approved addendum for FFI and the draft addendum for hierarchical modules. I would really be concerned about using them (it's certainly not like they're going to just disappear on you one day, like say functional dependencies almost certainly will). But that's just me.

Personally, I just try to avoid *all* language extensions - mainly because most of them are utterly incomprehensible. (But then, perhaps that's just because they all cover extremely rare edge cases?)

MPTCs and ATs look useful. The rest... hmm. If I ever figure out what they do, maybe I can comment.

And finally, after I correct all of those, I get an error saying that
the compiler can't match [the hidden type variable] against [some
suitable type for that variable]. And in a pattern of all things!
(Surely if it's not the right type at runtime, it should generate an
exception, just like if you use the wrong constructor...?)

Just a side point but: how would it know? Leaving aside the dictionary-passing used for type classes, Haskell has (and has always had) a type-erasure semantics, which rules out runtime type errors.

Usually if you have something like

 let (Foo x) = process x y z

and it turns out that the 'process' function returns another constructor, you get an error. Well you'd expect the same thing to happen if the result type happens to be a 'hidden' type. But apparently not...

So *neeer* :-P

My first thought is that surely you must have said

newtype Parser state x y
  = forall src. Source src => Parser ((state, src x) -> (state, src x, y))

when you meant

newtype Parser state x y
  = Parser (forall src. Source src => (state, src x) -> (state, src x, y))

The relative order of the constructor name and the forall is very important!

Care to explain what's different about these apparently identical declarations?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to