module SMacros where
import AbsSrc
apps :: Exp -> (Exp,[Exp])
apps e = (f,reverse xs) where
(f,xs) = aps e
aps e = case e of
EApp f x -> let (f',xs) = aps f in (f',x:xs)
_ -> (e,[])
constr :: Ident -> [Exp] -> Exp
constr = ECst
mkApp :: Exp -> [Exp] -> Exp
mkApp f = foldl EApp f