compose2 :: Function -> Function -> Function -> Function
compose2 f g h = Function (show f ++ "(" ++ show g ++ "," ++ show h ++ ")") (\v ->
  runFunction f =<< (do
    gv <- runFunction g v
    hv <- runFunction h v
    return $ Vec.fromList [gv, hv]
  ))
compose2 :: Function -> Function -> Function -> Function
compose2 f g h = Function (show f ++ "(" ++ show g ++ "," ++ show h ++ ")") (\v ->
  runFunction f =<< (do
    gv <- runFunction g v
    hv <- runFunction h v
    return $ Vec.fromList [gv, hv]
  ))
compose2 f g h = Function (show f ++ "(" ++ show g ++ "," ++ show h ++ ")") (\v ->
  runFunction f =<< (do
    gv <- runFunction g v
    hv <- runFunction h v
    return $ Vec.fromList [gv, hv]
  ))