subs (LamExpr n e) old new 
    | n == old = return $ (LamExpr n e)
    | otherwise = do
        subs' <- (subs e old new)
        return $ LamExpr n subs'
subs (LamExpr n e) old new 
    | n == old = return $ (LamExpr n e)
    | otherwise = do
        subs' <- (subs e old new)
        return $ LamExpr n subs'
subs (LamExpr n e) old new 
    | n == old = return $ (LamExpr n e)
    | otherwise = do
        subs' <- (subs e old new)
        return $ LamExpr n subs'