RE: type aliases and Id

2007-03-20 Thread Simon Peyton-Jones
| Ganesh and I were discussing today what would happen if one adds Id | as a primitive type constructor. How much did you have to change the | type checker? Presumably if you need to unify 'm a' with 'a' you now | have to set m=Id. Do you know if you can run into higher order | unification

Re: strict bits of datatypes

2007-03-20 Thread Robert Dockins
On Mar 20, 2007, at 9:53 AM, Malcolm Wallace wrote: Ian Lynagh [EMAIL PROTECTED] wrote: data Fin a = FinCons a !(Fin a) | FinNil w = let q = FinCons 3 q in case q of FinCons i _ - i is w 3 or _|_? Knowing that opinions seem to be heavily stacked against my

RE: strict bits of datatypes

2007-03-20 Thread Bernie Pope
Malcolm wrote: The Haskell Report's definition of `seq` does _not_ imply an order of evaluation. Rather, it is a strictness annotation. That is an important point. Now, in the definition x = x `seq` foo one can also make the argument that, if the value of x (on the lhs of the defn)

Re: type aliases and Id

2007-03-20 Thread Jacques Carette
There is a general solution, but it essentially involves polymorphism a-la-Omega (or as in Coq's Calculus of Inductive Constructions). The most general description of (Tree Int) is as the Stream S = [Int, Tree, Id, Id, ...] You are now attempting to pull-off exactly 2 terms from that Stream.