-- Maybe is handled like the Maybe-of-Sum monoid
instance AdditiveGroup a => AdditiveGroup (Maybe a) where
zeroV = Nothing Nothing ^+^ b' = b'
a' ^+^ Nothing = a'
Just a' ^+^ Just b' = Just (a' ^+^ b')
negateV = fmap negateV
{- Alexey Khudyakov wrote:
I looked through vector-space package and found lawless instance. Namely Maybe's AdditiveGroup instance It's group so following relation is expected to hold. Otherwise it's not a group.
> x ^+^ negateV x == zeroV
Here is counterexample:
> let x = Just 2 in x ^+^ negateV x == zeroV
False
I think it's not possible to sensibly define group instance for Maybe a at all.I see that the problem here is in distinguishing 'Just zeroV' fromNothing. I could fix the Just + Just line to use Nothing instead of JustzeroV when a' ^+^ b' == zeroV, although doing so would require Eq a andhence lose some generality. Even so, the abstraction leak would probablyshow up elsewhere.Hm.
-}