@@ -17,21 +17,43 @@ desugar :: SyntaxInfo -> IState -> PTerm -> PTerm
17desugar syn i t = let t' = expandDo (dsl_info syn) t in
17desugar syn i t = let t' = expandDo (dsl_info syn) t in
18 t' -- addImpl i t'
18 t' -- addImpl i t'
20+mkTTName :: FC -> Name -> PTerm
22+ let mkList fc [] = PRef fc (sNS (sUN "Nil") ["List", "Prelude"])
23+ mkList fc (x:xs) = PApp fc (PRef fc (sNS (sUN "::") ["List", "Prelude"]))
25+ , pexp (mkList fc xs)]
26+ stringC = PConstant . Str . str
28+ reflm n = sNS (sUN n) ["Reflection", "Language"]
30+ UN nm -> PApp fc (PRef fc (reflm "UN")) [ pexp (stringC nm)]
31+ NS nm ns -> PApp fc (PRef fc (reflm "NS")) [ pexp (mkTTName fc nm)
32+ , pexp (mkList fc ns)]
33+ MN i nm -> PApp fc (PRef fc (reflm "MN")) [ pexp (intC i)
35+ otherwise -> PRef fc $ reflm "NErased"
20expandDo :: DSL -> PTerm -> PTerm
37expandDo :: DSL -> PTerm -> PTerm
21expandDo dsl (PLam fc n ty tm)
38expandDo dsl (PLam fc n ty tm)
22 | Just lam <- dsl_lambda dsl
39 | Just lam <- dsl_lambda dsl
40+ = let sc = PApp fc lam [ pexp (mkTTName fc n)
23− = let sc = PApp fc lam [pexp (var dsl n tm 0)] in
41+ , pexp (var dsl n tm 0)]
24− expandDo dsl sc
42+ in expandDo dsl sc
25expandDo dsl (PLam fc n ty tm) = PLam fc n (expandDo dsl ty) (expandDo dsl tm)
43expandDo dsl (PLam fc n ty tm) = PLam fc n (expandDo dsl ty) (expandDo dsl tm)
26expandDo dsl (PLet fc n ty v tm)
44expandDo dsl (PLet fc n ty v tm)
27 | Just letb <- dsl_let dsl
45 | Just letb <- dsl_let dsl
28− = let sc = PApp (fileFC "(dsl)") letb [pexp v, pexp (var dsl n tm 0)] in
46+ = let sc = PApp (fileFC "(dsl)") letb [ pexp (mkTTName fc n)
48+ , pexp (var dsl n tm 0)]
29− expandDo dsl sc
49+ in expandDo dsl sc
30expandDo dsl (PLet fc n ty v tm) = PLet fc n (expandDo dsl ty) (expandDo dsl v) (expandDo dsl tm)
50expandDo dsl (PLet fc n ty v tm) = PLet fc n (expandDo dsl ty) (expandDo dsl v) (expandDo dsl tm)
31expandDo dsl (PPi p n ty tm)
51expandDo dsl (PPi p n ty tm)
32 | Just pi <- dsl_pi dsl
52 | Just pi <- dsl_pi dsl
53+ = let sc = PApp (fileFC "(dsl)") pi [ pexp (mkTTName (fileFC "(dsl)") n)
33− = let sc = PApp (fileFC "(dsl)") pi [pexp ty, pexp (var dsl n tm 0)] in
55+ , pexp (var dsl n tm 0)]
34− expandDo dsl sc
56+ in expandDo dsl sc
35expandDo dsl (PPi p n ty tm) = PPi p n (expandDo dsl ty) (expandDo dsl tm)
57expandDo dsl (PPi p n ty tm) = PPi p n (expandDo dsl ty) (expandDo dsl tm)
36expandDo dsl (PApp fc t args) = PApp fc (expandDo dsl t)
58expandDo dsl (PApp fc t args) = PApp fc (expandDo dsl t)
37 (map (fmap (expandDo dsl)) args)
59 (map (fmap (expandDo dsl)) args)