14
data Pat = ConP Name [Pat]
18
data Clause = Clause [Pat] Exp
20
type Sig = Map Name [Clause]
22
data LamView = NoLam Exp
25
data AppView = Apps Exp [Exp]
27
lamView :: Exp -> LamView
28
lamView (Lam v) = lam $ lamView v
30
lam (NoLam v) = Lams 1 v
31
lam (Lams n v) = Lams (n + 1) v
34
appView :: Exp -> AppView
35
appView (App u v) = appView u `app` v
37
app (Apps u vs) v = Apps u (vs ++ [v])
40
apps :: Exp -> [Exp] -> Exp