fudgets-0.18.3: Demos/graph/Eval.hs
module Eval where
import Exp
import Ops
--import List(union)
eval e =
case e of
Var -> id
Const k -> const k
Pow b e -> let bv = eval b
in \ x -> bv x ^^ e
Binop bop e1 e2 ->
let f = binopfun bop
v1 = eval e1
v2 = eval e2
in \x -> f (v1 x) (v2 x)
Unop unop e ->
let f = unopfun unop
in f . eval e
{-
freevars e =
case e of
Var x -> [x]
Const _ -> []
Binop _ e1 e2 -> union (freevars e1) (freevars e2)
Unop _ e -> freevars e
-}