#2309: containers: specialize functions that fail in a Monad to
Maybe
Conor McBride
conor at strictlypositive.org
Wed May 28 06:11:32 EDT 2008
Hi
On 28 May 2008, at 10:21, apfelmus wrote:
> Ross Paterson wrote:
>> Several functions on containers used to have types like
>> lookup :: (Ord k) => k -> Map k a -> Maybe a
>> but these were generalized to
>> lookup :: (Monad m, Ord k) => k -> Map k a -> m a
>> The proposal is to change these signatures back, specializing them
>> to Maybe.
>
> I'm all for Maybe in the question Monad VS Maybe.
Me too. (+1) for Ross's proposal.
[..]
> Also, it's not entirely clear whether MonadZero is the most general
> abstraction. Is ApplicativeZero better? Or something else?
Maybe is the most general abstraction. Requiring
(>>=), or even (<*>) seems excessive. What we need
is "any f with zero and return", so why not pick
the canonical, initial, inductively defined such
thing?
>
> In any case, I prefer Maybe here as well because it's
> straightforward and simple. Every other abstraction is just a
> lift away.
And that's no coincidence, of course. The whole
point of inductive definition is to, er, induce such
lifts to other settings with /at least/ the same
structure. The point was well made to me by James
McKinna, years ago, when he suggested that we mediate
Epigram's system of "views" via datatypes: the
cheap way of abstracting over "all predicates closed
under this and that" is to consider the initial one,
ie the inductively defined thing with this and that.
A whole bunch of higher-order jiggery-pokery with
control operators became plain first-order code at a
stroke.
So it's not a question of concrete-vs-abstract here.
The concrete is by inductive (morally anyway)
definition, the most abstract thing you can have.
All the best
Conor
More information about the Libraries
mailing list