m |+ zero == m
ray . angle == basis magnitude (ray x) == one
m |/ one = m
m |* one = m m |* zero = zero
m |- zero = m
fail s >>= f = fail sIf your Monad is also MonadPlus, a popular definition is
fail _ = mzero
>>> concat (Just [1, 2, 3]) [1,2,3]
>>> concat (Left 42) []
>>> concat [[1, 2, 3], [4, 5], [6], []] [1,2,3,4,5,6]
>>> concatMap (take 3) [[1..], [10..], [100..], [1000..]] [1,2,3,10,11,12,100,101,102,1000,1001,1002]
>>> concatMap (take 3) (Just [1..]) [1,2,3]
>>> const 42 "hello" 42
>>> map (const 42) [0..3] [42,42,42,42]