Lazier Semigroup instance for Maybe
Mailing list discussion here: https://mail.haskell.org/pipermail/libraries/2018-May/028818.html
The existing Semigroup
instance for Maybe
is:
instance Semigroup a => Semigroup (Maybe a) where
Nothing <> b = b
a <> Nothing = a
Just a <> Just b = Just (a <> b)
It has been proposed that it be replaced by:
instance Semigroup a => Semigroup (Maybe a) where
Nothing <> b = b
Just a <> b = Just (maybe a (a<>) b)
This is lazier in the second argument, making it more consistent with the strictness of the Semigroup
instances for And
,Or
,Ord
,Either
,Proxy
and ()
. Equivalently, we could write:
instance Semigroup a => Semigroup (Maybe a) where
Nothing <> b = b
Just a <> Nothing = Just a
Just a <> Just b = Just (a <> b)
This makes it a little more clear that we aren't building a closure for partial function application, but it should have the same behavior.
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.2 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | ekmett |
Operating system | |
Architecture |