>>> sum [] 0
>>> sum [42] 42
>>> sum [1..10] 55
>>> sum [4.1, 2.0, 1.7] 7.8
>>> sum [1..] * Hangs forever *
>>> sum [] 0 >>> sum [42] 42 >>> sum [1..10] 55 >>> sum [4.1, 2.0, 1.7] 7.8 >>> sum [1..] * Hangs forever *
>>> fmap (+1) (InL (Just 1)) :: Sum Maybe [] Int InL (Just 2)
>>> fmap (+1) (InR [1, 2, 3]) :: Sum Maybe [] Int InR [2,3,4]
Sum a <> Sum b = Sum (a + b)
>>> Sum 1 <> Sum 2 <> mempty Sum {getSum = 3}
>>> mconcat [ Sum n | n <- [3 .. 9]] Sum {getSum = 42}
>>> asum [Just "Hello", Nothing, Just "World"] Just "Hello"
>>> biasum (Nothing, Nothing) Nothing
>>> biasum (Nothing, Just 42) Just 42
>>> biasum (Just 18, Nothing) Just 18
>>> biasum (Just 18, Just 42) Just 18
>>> bisum (42, 17) 59
>>> bisum (Right 42) 42
>>> bisum (BiList [13, 29, 4] [18, 1, 7]) 72
>>> bisum (BiList [13, 29, 4] []) 46
>>> bisum (BiList [] []) 0