CSC448: Type Checking Revisited: Let Polymorphism I [121/133] |
Why is let x = M in N
more difficult?
let take = fun f i => fun g xs => if (is_zero (i)) then [] else cons (head (xs)) (f (i - 1) (tail (xs))) in (length (take 2 ["a", "b", "c"])) + (length (take 1 [1, 2, 3]))
We need take
to be bound to a type scheme
instead of a type.