write-you-a-haskell
write-you-a-haskell copied to clipboard
SKK /= I in chapter 4
I am working through your wonderful "Write you a Haskell" tutorial, thanks a lot for creating it in the first place.
I have downloaded and compiled the code for chapter 4 (the untyped lambda calculus).
Contrary to the explanations in the text, SKK does not reduce to I in my case, instead I get:
Untyped> (\x y z. x z (y z)) (\x y . x) (\x y . x)
=> \x y z . (x z (y z))
=> \x y . x
=> \x y z . (x z (y z)) (\x y . x)
=> \x y . x
<<closure>>
Untyped>
Recall, that according to the text on page 50 I should see something along the lines of:
Untyped> (\x y z. x z (y z)) (\x y . x) (\x y . x)
=> \x y z . (x z (y z))
=> \y z . ((\x y . x) z (y z))
=> \x y . x
=> \y . z
=> z
=> \z . z
\z . z
I wonder what's going on? Cannot be a huge thing, as the data structures / code base is relatively small at this point.
Nevertheless, as SKK=I is supposed to be a kind of litmus test, I would like to get this fixed.
A few more explanations for what's going on in detail in Eval.hs would also be nice (VClosure, Scope, type Eval = WriterT [Step](State EvalState) a, inc, red, etc)
Thanks.
In this case you get a closure whose value is an identity function (\x -> x
).
OK, thanks.
Stephen Diehl [email protected] writes:
In this case you get a closure whose value is an identity function (
\x -> x
).