Maybe-summary was: Re: [Haskell-cafe] Re: [Haskell] ANN: random-access-list-0.1

Isaac Dupree isaacdupree at charter.net
Fri Jun 13 08:59:34 EDT 2008


Claus Reinke wrote:
>> To summarize: Monad isn't the proper abstraction for failable/Maybe. 
>> Maybe is an algebraic data type that *exactly* represents the spirit 
>> of what you're trying to do: e.g. Conor McBride said: "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 this 
>> case the typeclass adds no generality to the function's behaviour 
>> (Maybe can be trivially converted to any other type, with a combinator 
>> even).  And the confusion that results, when the function is almost 
>> always used at type Maybe anyway.  If you want to read the whole 
>> discussion... if you haven't been subscribed to libraries at haskell.org 
>> , it's archived:
>> http://thread.gmane.org/gmane.comp.lang.haskell.libraries/9082
> 
> Thanks for the summary. I had been wondering about this
> change of mood, and I disagree with the suggestion that
> Maybe Nothing is the right replacement for Monad fail.
> Whether fail should be in Monad, or whether we really want MonadZero, 
> MonadPlus, MonadError, or something else entirely has been open for 
> discussion, but it is easily shown
> that Maybe is not the most general abstraction - it loses information 
> wrt to (Either String), for instance:
> 
> Prelude> let {f [] = fail "empty"; f [_] = fail "singleton"; f l = 
> return l }

okay, I see, it's just that most partial functions in Data.* / container 
libraries don't really have multiple failure modes that need 
distinguishing.  You could say, in a type/information-theoretic mindset, 
that even your "f [_]" above loses information because it doesn't vary 
based on the _ (and so it isn't reversible) (and this is very common and 
normal especially for error messages, but there's a large design space 
for places where they're needed, depending on whether a machine needs to 
understand the message, etc.)  I think we didn't conclude much about 
e.g. parser-library return types, because we (thankfully) weren't trying to.

-Isaac


More information about the Haskell-Cafe mailing list