@@ -13,7 +13,7 @@ import Control.Monad.State
1313import Debug.Trace
1414
1515debindApp :: 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
1717
1818desugar :: SyntaxInfo -> IState -> PTerm -> PTerm
1919desugar 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
127127 bindAll (reverse bs) tm'
128128 where
129129 db' :: PTerm -> State ([(Name, FC, PTerm)], Int) PTerm
130+ db' (PAppBind _ (PApp fc t args) [])
131+ = db' (PAppBind fc t args)
130132 db' (PAppBind fc t args)
131− = do args' <- dbs args
132− (bs, n) <- get
133− let nm = MN n ("bindApp" ++ show n)
134− put ((nm, fc, PApp fc t args') : bs, n+1)
135− return (PRef fc nm)
133+ = do args' <- dbs args
134+ (bs, n) <- get
135+ let nm = MN n ("bindApp" ++ show n)
136+ put ((nm, fc, PApp fc t args') : bs, n+1)
137+ return (PRef fc nm)
136138 db' (PApp fc t args)
137− = do args' <- mapM dbArg args
138− return (PApp fc t args')
139+ = do t' <- db' t
140+ args' <- mapM dbArg args
141+ return (PApp fc t' args')
139142 db' (PLam n ty sc) = return (PLam n ty (debind b sc))
140143 db' (PLet n ty v sc) = do v' <- db' v
141144 return (PLet n ty v' (debind b sc))
@@ -147,7 +150,7 @@ debind b tm = let (tm', (bs, _)) = runState (db' tm) ([], 0) in
147150 db' (PDPair fc l t r) = do l' <- db' l
148151 r' <- db' r
149152 return (PDPair fc l' t r')
150− db' t = return t -- TODO, finish
153+ db' t = return t
151154
152155 dbArg a = do t' <- db' (getTm a)
153156 return (a { getTm = t' })