>>> 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}
Sum (Left q) = 2*q Sum (Right q) = 2*q+1
>>> getSum (Sum 1 <> Sum 2 <> mempty) 3
>>> getSum (Sum 1 <> Sum 2 <> mempty) 3
>>> :kind! Eval (Sum '[1,2,3]) Eval (Sum '[1,2,3]) :: Natural = 6
>>> getSum (Sum 1 <> Sum 2 <> mempty) 3