@@ -73,6 +73,8 @@ instance ToEpic (TT Name) where
7373 = do v' <- epic' env v
7474 k' <- epic' env k
7575 return (k' @@ (effect_ v'))
76+ | (P (DCon t a) n _, args) <- unApply tm
77+ = epicCon env t a n args
7678 epic' env (P (DCon t a) n _) = return $ con_ t
7779 epic' env (P (TCon t a) n _) = return $ con_ t
7880 epic' env (P _ n _) = return $ ref (ename n)
@@ -91,6 +93,20 @@ instance ToEpic (TT Name) where
9193 epic' env (Constant c) = epic c
9294 epic' env (Set _) = return impossible
9395
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')
102+
103+ satArgs n = map (\i -> MN i "sat") [1..n]
104+
105+ buildApp env e [] = return e
106+ buildApp env e (x:xs) = do x' <- epic' env x
107+ buildApp env (e @@ x') xs
108+
109+
94110doForeign :: [TT Name] -> Idris E.Term
95111doForeign (_ : fgn : args)
96112 | (_, (Constant (Str fgnName) : fgnArgTys : P _ (UN ret) _ : [])) <- unApply fgn