write-you-a-haskell icon indicating copy to clipboard operation
write-you-a-haskell copied to clipboard

SKK /= I in chapter 4

Open reuleaux opened this issue 8 years ago • 2 comments

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.

reuleaux avatar Sep 01 '16 14:09 reuleaux

In this case you get a closure whose value is an identity function (\x -> x).

sdiehl avatar Oct 31 '16 12:10 sdiehl

OK, thanks.

Stephen Diehl [email protected] writes:

In this case you get a closure whose value is an identity function (\x -> x).

reuleaux avatar Nov 04 '16 02:11 reuleaux