equal
deleted
inserted
replaced
|
1 theory ExCoreHaskell |
|
2 imports "Parser" |
|
3 begin |
|
4 |
|
5 (* core haskell *) |
|
6 |
|
7 ML {* val _ = recursive := false *} |
|
8 |
|
9 atom_decl var |
|
10 atom_decl tvar |
|
11 |
|
12 (* there are types, coercion types and regular types *) |
|
13 (* list-data-structure |
|
14 nominal_datatype tkind = |
|
15 KStar |
|
16 | KFun "tkind" "tkind" |
|
17 and ckind = |
|
18 CKEq "ty" "ty" |
|
19 and ty = |
|
20 TVar "tvar" |
|
21 | TC "string" |
|
22 | TApp "ty" "ty" |
|
23 | TFun "string" "ty list" |
|
24 | TAll tv::"tvar" "tkind" T::"ty" bind tv in T |
|
25 | TEq "ty" "ty" "ty" |
|
26 and co = |
|
27 CC "string" |
|
28 | CApp "co" "co" |
|
29 | CFun "string" "co list" |
|
30 | CAll tv::"tvar" "ckind" C::"co" bind tv in C |
|
31 | CEq "co" "co" "co" |
|
32 | CSym "co" |
|
33 | CCir "co" "co" |
|
34 | CLeft "co" |
|
35 | CRight "co" |
|
36 | CSim "co" |
|
37 | CRightc "co" |
|
38 | CLeftc "co" |
|
39 | CCoe "co" "co" |
|
40 |
|
41 abbreviation |
|
42 "atoms A \<equiv> atom ` A" |
|
43 |
|
44 nominal_datatype trm = |
|
45 Var "var" |
|
46 | C "string" |
|
47 | LAM tv::"tvar" "kind" t::"trm" bind tv in t |
|
48 | APP "trm" "ty" |
|
49 | Lam v::"var" "ty" t::"trm" bind v in t |
|
50 | App "trm" "trm" |
|
51 | Let x::"var" "ty" "trm" t::"trm" bind x in t |
|
52 | Case "trm" "assoc list" |
|
53 | Cast "trm" "ty" --"ty is supposed to be a coercion type only" |
|
54 and assoc = |
|
55 A p::"pat" t::"trm" bind "bv p" in t |
|
56 and pat = |
|
57 K "string" "(tvar \<times> kind) list" "(var \<times> ty) list" |
|
58 binder |
|
59 bv :: "pat \<Rightarrow> atom set" |
|
60 where |
|
61 "bv (K s ts vs) = (atoms (set (map fst ts))) \<union> (atoms (set (map fst vs)))" |
|
62 *) |
|
63 |
|
64 end |
|
65 |
|
66 |
|
67 |