[GHC] #15182: Lazier Semigroup instance for Maybe
GHC
ghc-devs at haskell.org
Thu May 24 14:14:51 UTC 2018
#15182: Lazier Semigroup instance for Maybe
-------------------------------------+-------------------------------------
Reporter: andrewthad | Owner: (none)
Type: feature | Status: new
request |
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
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.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15182>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list