>>> liftA2 (,) (Just 3) (Just 5) Just (3,5)
>>> liftA2 (+) [1, 2, 3] [4, 5, 6] [5,6,7,6,7,8,7,8,9]
>>> liftA2 (,) (Just 3) (Just 5) Just (3,5)
do a <- as b <- bs pure (f a b)
>>> liftM2 (+) [0,1] [0,2] [0,2,1,3]
>>> liftM2 (+) (Just 1) Nothing Nothing
>>> liftM2 (+) (+ 3) (* 2) 5 18
liftM2 (+) [0,1] [0,2] = [0,2,1,3] liftM2 (+) (Just 1) Nothing = Nothing
>>> import Data.Vector.Fixed.Boxed (Vec3) >>> let b0 = basis 0 :: Vec3 Int >>> let b1 = basis 1 :: Vec3 Int >>> let b2 = basis 2 :: Vec3 Int >>> let vplus x y = zipWith (+) x y >>> vplus b0 b1 [1,1,0] >>> vplus b0 b2 [1,0,1] >>> vplus b1 b2 [0,1,1]