plait icon indicating copy to clipboard operation
plait copied to clipboard

rename of `eval` seems to be broken

Open shriram opened this issue 2 years ago • 1 comments

This is a large program fragment because I wanted to show much this impacts.

In the following program, renaming any instance of eval with (say) calc causes a catastrophic renaming in the program: even the #lang line gets altered, which I didn't think was possible. If I start out with a more innocent name than eval (e.g., calc) and then rename, there is no such problem.

#lang plait

(define-type Expr
  [num (n : Number)]
  [plus (l : Expr) (r : Expr)])

(num 1)
(num 2.3)
(plus (num 1) (num 2))
(plus (plus (num 1) (num 2))
      (num 3))
(plus (num 1)
      (plus (num 2) (num 3)))
(plus (num 1)
      (plus (plus (num 2)
                  (num 3))
            (num 4)))

(eval : (Expr -> Number))

(define (eval e)
  (type-case Expr e
    [(num n) n]
    [(plus l r) (+ (eval l) (eval r))]))

(test (eval (num 1)) 1)
(test (eval (num 2.3)) 2.3)
(test (eval (plus (num 1) (num 2))) 3)
(test (eval (plus (plus (num 1) (num 2))
                  (num 3)))
      6)
(test (eval (plus (num 1)
                  (plus (num 2) (num 3))))
      6)
(test (eval (plus (num 1)
                  (plus (plus (num 2)
                              (num 3))
                        (num 4))))
      10)

shriram avatar Sep 12 '21 20:09 shriram