The problem is that only applications are wrapped with the toplevel-forcer. (And you don't actually need !!. Just the regular ! should be sufficient.)
For a short term solution, if you select Lazy Racket in the language menu instead of #lang lazy, it will do what you want, due to a subtlety in the way languages are implemented. Lazy Racket when selected in the menu is implemented as a "tool", so top level variables are wrapped with #%top, which gets forced. #lang languages are module languages and module level variables have no such wrapping. ps racket-dev, should the #%top from lazy racket be removed? On Mon, Nov 14, 2011 at 2:53 PM, Eric Tanter <etan...@dcc.uchile.cl> wrote: > Hi, > > I'd like to tweak Lazy Racket such that the top-level interactions in the > REPL always use `!!' (recursive force), in order to mimic Haskell's behavior > as close as possible. > > If someone can help me in the very brief term, I would really appreciate it > (I plan to start teaching on laziness using Lazy Racket tomorrow). > > Thanks in advance! > > -- Éric > > PS: Eli told me of some parameter that controls this behavior. I think it is > `toplevel-forcer', but a) I'm not sure, b) even if I hack it manually (edit > lazy.rkt), it does not work: > > ;; parameter is properly set to `!!' >> (toplevel-forcer) > #<procedure:!!> > >> ones > #<promise:ones> > >> (!! ones) > #0='(1 . #0#) > > I'd like the following behavior: >> ones > #0='(1 . #0#) > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/users > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users