apply env c@(FuncCtx bi@(Builtin params f)  args) arg
    | (length args) + 1 == params = do
        --arg' <- (eval env arg)
        f (args ++ [arg])
    | otherwise = do
        --arg' <- (eval env arg)
        return $ FuncCtx bi (args ++ [arg])
-- ^Of course there is a defined function
apply env c@(FuncCtx bi@(Builtin params f)  args) arg
    | (length args) + 1 == params = do
        --arg' <- (eval env arg)
        f (args ++ [arg])
    | otherwise = do
        --arg' <- (eval env arg)
        return $ FuncCtx bi (args ++ [arg])
-- ^Of course there is a defined function
apply env c@(FuncCtx bi@(Builtin params f)  args) arg
    | (length args) + 1 == params = do
        --arg' <- (eval env arg)
        f (args ++ [arg])
    | otherwise = do
        --arg' <- (eval env arg)
        return $ FuncCtx bi (args ++ [arg])
-- ^Of course there is a defined function