function :: Gen (Declaration, Declaration)
function = do
    name <- lowerIdentifier
    typ  <- Function <$> typeLiteral WithNothing <*> typeLiteral WithUnit
    let n = numArgs typ
    args <- vectorOf n lowerIdentifier
    body <- statements3
    return ( FunctionType name typ
           , FunctionDecl name args body )
function :: Gen (Declaration, Declaration)
function = do
    name <- lowerIdentifier
    typ  <- Function <$> typeLiteral WithNothing <*> typeLiteral WithUnit
    let n = numArgs typ
    args <- vectorOf n lowerIdentifier
    body <- statements3
    return ( FunctionType name typ
           , FunctionDecl name args body )
function = do
    name <- lowerIdentifier
    typ  <- Function <$> typeLiteral WithNothing <*> typeLiteral WithUnit
    let n = numArgs typ
    args <- vectorOf n lowerIdentifier
    body <- statements3
    return ( FunctionType name typ
           , FunctionDecl name args body )