data Lam :: Type -> Type where LamVar :: String -> Lam a LamInt :: Int -> Lam Int LamNeg :: Lam Int -> Lam Int LamAdd :: Lam Int -> Lam Int -> Lam Int LamSub :: Lam Int -> Lam Int -> Lam Int LamMul :: Lam Int -> Lam Int -> Lam Int LamAbs :: String -> Lam b -> Lam (a -> b) LamApp :: Lam (a -> b) -> Lam a -> Lam b