Pointed [Re: 2014 Applicative => Monad proposal]
Petr Pudlák
petr.mvd at gmail.com
Sun May 26 09:57:06 CEST 2013
Dne 25.5.2013 17:33, Dan Doel napsal(a):
> On Fri, May 24, 2013 at 2:15 PM, Andreas Abel <andreas.abel at ifi.lmu.de
> <mailto:andreas.abel at ifi.lmu.de>> wrote:
>
> [...]
> Pointed is pretty bad for this. Or, maybe, it's good: there's nothing
> to reason about, because there's nothing you can reason about. It just
> does _something_ unspecified. Hopefully something that is good for
> combining with some other type class.
-1 on |Pointed|.
>
> I've reluctantly come around to the Apply/Bind classes (despite them
> having bad names), because they actually follow the way people
> typically build up structure in algebra. Rarely do you see people
> defining 'a monoid is a pointed set equipped with an associative
> binary operation that uses the point as an identity.' It's much more
> likely that you see, 'a monoid is a semigroup with an identity for the
> binary operation.' I suspect that's even how many people would like to
> see the hierarchy at this point: Semigroup m => Monoid m. And not
> Default m => Monoid m, because Default is just ad-hoc nonsense (even
> if it's sometimes useful).
>
> To answer your original question, perhaps a somewhat better way of
> characterizing the problem is probably talking about 'monoids m over
> type a'. Perhaps something like:
>
> class Monoid m => MonoidOver a m | m -> a where
> embed :: a -> m
>
> which expresses that m is expected to be generated (as a monoid) by a
> in some way. Then maybe you can say something about how it interacts
> with the Monoid operations, which seems preferable to me to, "the
> operation of this class does anything, except if the type is also a
> monoid, or if it's also a monad...."
I think you hit the nail on the head here. The only places when I missed
something like Pointed were when I wanted to abstract building some kind
of collection (Set / [] / Seq / ...). They're all monoids, but you need
some way how to construct singleton collections. Having |MonoidOver|
would solve precisely this problem. I'd certainly prefer something like
this over |Pointed|.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20130526/dc6576cf/attachment.htm>
More information about the Libraries
mailing list