[Haskell-cafe] foldMap for semigroups
coot at coot.me
coot at coot.me
Sat May 15 07:38:02 UTC 2021
Thanks Oleg, I would love to see `Foldable1` to be in base.
This seems to be a topic that comes back again and again, so I am not sure why there's a lack of decision so far.
There is a whole ecosystem of non empty data types: `nonempty-containers`, `nonempty-vector`, `nonempty-dlist`, `nonempty-lift` and the most funny one `Identity` from `base` - the nonempty `Maybe` ;). For all of them `Foldable1` instance are non partial. Isn't this a good enough argument to move `Foldable1` to base?
Maybe this could go through HF to help facilitate the decision?
My recent discovery why I'd like to have it is a last-to-finish synchronisation which is a semigroup:
https://github.com/input-output-hk/ouroboros-network/blob/coot/last-to-finish-stm/ouroboros-network-framework/src/Data/Monoid/Synchronisation.hs#L85
There's also last-to-finish based on `Ap`. The `LastToFinish m a` does not require Monoid instance on `a`, unlike `Ap a`, so it is easier to use, but it requires `foldMap1` which is not in `base`.
Cheers,
Marcin
Sent with ProtonMail Secure Email.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Friday, May 14th, 2021 at 23:11, Henning Thielemann <lemming at henning-thielemann.de> wrote:
> On Fri, 14 May 2021, coot at coot.me wrote:
>
> > Base has:
> >
> > - foldMap :: (Foldable t, Monoid a) => (x -> a) -> t x -> a
> > - foldr1 :: (Foldable t) => (a -> a -> a) -> t x -> a
> >
> > Is there a good reason why it does not have:
> >
> > foldMap1 :: (Foldable t, Semigroup a, Functor f) => (a -> a) -> t x -> a
> > foldMap1 = fodlr1 (<>) . fmap f
> >
> >
> > Like `foldr1` it is partial for any foldable that can be empty.
>
> I do not think we should extend support for partial functions.
>
> foldMap1 should be restricted to non-empty Foldable (i.e. Foldable1).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 509 bytes
Desc: OpenPGP digital signature
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20210515/9a4a17f0/attachment.sig>
More information about the Haskell-Cafe
mailing list