@@ -13,7 +13,7 @@ import Control.Monad.State
13import Debug.Trace
13import Debug.Trace
15debindApp :: SyntaxInfo -> PTerm -> PTerm
15debindApp :: SyntaxInfo -> PTerm -> PTerm
16−debindApp syn t = debind (dsl_bind (dsl_info syn)) t
16+debindApp syn t = debind (dsl_bind (dsl_info syn)) t
18desugar :: SyntaxInfo -> IState -> PTerm -> PTerm
18desugar :: SyntaxInfo -> IState -> PTerm -> PTerm
19desugar syn i t = let t' = expandDo (dsl_info syn) t in
19desugar syn i t = let t' = expandDo (dsl_info syn) t in
@@ -127,15 +127,18 @@ debind b tm = let (tm', (bs, _)) = runState (db' tm) ([], 0) in
127 bindAll (reverse bs) tm'
127 bindAll (reverse bs) tm'
129 db' :: PTerm -> State ([(Name, FC, PTerm)], Int) PTerm
129 db' :: PTerm -> State ([(Name, FC, PTerm)], Int) PTerm
130+ db' (PAppBind _ (PApp fc t args) [])
131+ = db' (PAppBind fc t args)
130 db' (PAppBind fc t args)
132 db' (PAppBind fc t args)
131− = do args' <- dbs args
133+ = do args' <- dbs args
132− (bs, n) <- get
134+ (bs, n) <- get
133− let nm = MN n ("bindApp" ++ show n)
135+ let nm = MN n ("bindApp" ++ show n)
134− put ((nm, fc, PApp fc t args') : bs, n+1)
136+ put ((nm, fc, PApp fc t args') : bs, n+1)
135− return (PRef fc nm)
137+ return (PRef fc nm)
136 db' (PApp fc t args)
138 db' (PApp fc t args)
137− = do args' <- mapM dbArg args
140+ args' <- mapM dbArg args
138− return (PApp fc t args')
141+ return (PApp fc t' args')
139 db' (PLam n ty sc) = return (PLam n ty (debind b sc))
142 db' (PLam n ty sc) = return (PLam n ty (debind b sc))
140 db' (PLet n ty v sc) = do v' <- db' v
143 db' (PLet n ty v sc) = do v' <- db' v
141 return (PLet n ty v' (debind b sc))
144 return (PLet n ty v' (debind b sc))
@@ -147,7 +150,7 @@ debind b tm = let (tm', (bs, _)) = runState (db' tm) ([], 0) in
147 db' (PDPair fc l t r) = do l' <- db' l
150 db' (PDPair fc l t r) = do l' <- db' l
148 r' <- db' r
151 r' <- db' r
149 return (PDPair fc l' t r')
152 return (PDPair fc l' t r')
150− db' t = return t -- TODO, finish
153+ db' t = return t
152 dbArg a = do t' <- db' (getTm a)
155 dbArg a = do t' <- db' (getTm a)
153 return (a { getTm = t' })
156 return (a { getTm = t' })