
#10365: Implement Semigroup as a superclass of Monoid Proposal (Phase 1) -------------------------------------+------------------------------------- Reporter: gidyn | Owner: quchen Type: feature request | Status: patch Priority: high | Milestone: 8.0.1 Component: libraries/base | Version: 7.10.1 Resolution: | Keywords: report-impact Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1284 Wiki Page: | -------------------------------------+------------------------------------- Comment (by Lemming): Replying to [comment:31 ekmett]:
The moral equivalent in `Semigroup` requires some form of canonical non- empty type to fold over. The net effect of removing it is that the `semigroups` package would continue to exist just to supply this type, the class would lose its canonical structure to fold over, and `sconcat` becomes unimplementable.
`sconcat` in base could have type `s -> [s] -> s`. Then there is no need for `NonEmpty` to be in `base` and people can define top-level functions that use `sconcat` to implement a counterpart for their favourite `NonEmpty` type (e.g. `Data.List.NonEmpty` or `Data.NonEmpty`). -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10365#comment:32 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler