equal
deleted
inserted
replaced
72 | mk_abstuple [v] body = absfree ((fst o dest_Free) v, dummyT, body) |
72 | mk_abstuple [v] body = absfree ((fst o dest_Free) v, dummyT, body) |
73 | mk_abstuple (v::w) body = Syntax.const "split" $ |
73 | mk_abstuple (v::w) body = Syntax.const "split" $ |
74 absfree ((fst o dest_Free) v, dummyT, mk_abstuple w body); |
74 absfree ((fst o dest_Free) v, dummyT, mk_abstuple w body); |
75 |
75 |
76 |
76 |
77 fun mk_fbody v e [] = Syntax.const "()" |
77 fun mk_fbody v e [] = Syntax.const "Unity" |
78 | mk_fbody v e [x] = if v=x then e else x |
78 | mk_fbody v e [x] = if v=x then e else x |
79 | mk_fbody v e (x::xs) = Syntax.const "Pair" $ (if v=x then e else x) $ |
79 | mk_fbody v e (x::xs) = Syntax.const "Pair" $ (if v=x then e else x) $ |
80 mk_fbody v e xs; |
80 mk_fbody v e xs; |
81 |
81 |
82 fun mk_fexp v e xs = mk_abstuple xs (mk_fbody v e xs); |
82 fun mk_fexp v e xs = mk_abstuple xs (mk_fbody v e xs); |