@@ -73,6 +73,8 @@ instance ToEpic (TT Name) where
73 = do v' <- epic' env v
73 = do v' <- epic' env v
74 k' <- epic' env k
74 k' <- epic' env k
75 return (k' @@ (effect_ v'))
75 return (k' @@ (effect_ v'))
76+ | (P (DCon t a) n _, args) <- unApply tm
77+ = epicCon env t a n args
76 epic' env (P (DCon t a) n _) = return $ con_ t
78 epic' env (P (DCon t a) n _) = return $ con_ t
77 epic' env (P (TCon t a) n _) = return $ con_ t
79 epic' env (P (TCon t a) n _) = return $ con_ t
78 epic' env (P _ n _) = return $ ref (ename n)
80 epic' env (P _ n _) = return $ ref (ename n)
@@ -91,6 +93,20 @@ instance ToEpic (TT Name) where
91 epic' env (Constant c) = epic c
93 epic' env (Constant c) = epic c
92 epic' env (Set _) = return impossible
94 epic' env (Set _) = return impossible
96+ epicCon env t arity n args
97+ | length args == arity = buildApp env (con_ t) args
98+ | otherwise = let extra = satArgs (arity - length args) in
99+ do sc' <- epicCon env t arity n
100+ (args ++ map (\n -> P Bound n undefined) extra)
101+ return $ term (map ename extra, sc')
103+ satArgs n = map (\i -> MN i "sat") [1..n]
105+ buildApp env e [] = return e
106+ buildApp env e (x:xs) = do x' <- epic' env x
107+ buildApp env (e @@ x') xs
94doForeign :: [TT Name] -> Idris E.Term
110doForeign :: [TT Name] -> Idris E.Term
95doForeign (_ : fgn : args)
111doForeign (_ : fgn : args)
96 | (_, (Constant (Str fgnName) : fgnArgTys : P _ (UN ret) _ : [])) <- unApply fgn
112 | (_, (Constant (Str fgnName) : fgnArgTys : P _ (UN ret) _ : [])) <- unApply fgn