~ubuntu-branches/ubuntu/wily/agda/wily-proposed

« back to all changes in this revision

Viewing changes to src/prototyping/eval/Syntax.hs

  • Committer: Package Import Robot
  • Author(s): Iain Lane
  • Date: 2014-08-05 06:38:12 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20140805063812-io8e77niomivhd49
Tags: 2.4.0.2-1
* [6e140ac] Imported Upstream version 2.4.0.2
* [2049fc8] Update Build-Depends to match control
* [93dc4d4] Install the new primitives
* [e48f40f] Fix typo dev→doc

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
module Syntax where
3
 
 
4
 
import Data.Map (Map)
5
 
 
6
 
type Name = String
7
 
 
8
 
data Exp = Var Int
9
 
         | Con Name
10
 
         | Def Name
11
 
         | App Exp Exp
12
 
         | Lam Exp
13
 
 
14
 
data Pat = ConP Name [Pat]
15
 
         | VarP
16
 
         | WildP
17
 
 
18
 
data Clause = Clause [Pat] Exp
19
 
 
20
 
type Sig = Map Name [Clause]
21
 
 
22
 
data LamView = NoLam Exp
23
 
             | Lams Int Exp
24
 
 
25
 
data AppView = Apps Exp [Exp]
26
 
 
27
 
lamView :: Exp -> LamView
28
 
lamView (Lam v) = lam $ lamView v
29
 
    where
30
 
        lam (NoLam v)  = Lams 1 v
31
 
        lam (Lams n v) = Lams (n + 1) v
32
 
lamView v       = NoLam v
33
 
 
34
 
appView :: Exp -> AppView
35
 
appView (App u v) = appView u `app` v
36
 
    where
37
 
        app (Apps u vs) v = Apps u (vs ++ [v])
38
 
appView v         = Apps v []
39
 
 
40
 
apps :: Exp -> [Exp] -> Exp
41
 
apps = foldl App