| 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
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
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)
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.