Coginitive Dimensions and Haskell (was RE: [Haskell] overuse of maybe and [] in prelude and libs)

S. Alexander Jacobson alex at alexjacobson.com
Thu Apr 8 13:24:58 EDT 2004


Also, out of curiosity (since you are at MSFT) are
you using any formal Cognitive Dimension stuff in
the design of Haskell or its libraries?

http://www.gotdotnet.com/team/brada/describingandevaluatingapiusabilityatmicrosoft.ppt

Your Excel paper is mentioned in the end-notes.
http://research.microsoft.com/Users/simonpj/papers/excel/excel.pdf

If so, is there a publicly available CD analysis
of Haskell and its libs available?

-Alex-

_________________________________________________________________
S. Alexander Jacobson                  mailto:me at alexjacobson.com
tel:917-770-6565                       http://alexjacobson.com


On Thu, 8 Apr 2004, Simon Peyton-Jones wrote:

> Alex
>
> You've become a very sophisticated Haskell programmer!
>
> We did at one stage do something like this, by making list comprehensions into monad comprehensions.  So
> 	[ x*x | x <- xs, pred x]
> meant the same as
> 	do { x <- xs; if pred x then mzero else return (); return (x*x)}
>
> But in the next iteration of the language we undid the change, a controversial decision that some still regret.  Because naïve users were getting too many perplexing error messages about monads and functors when they thought they were just manipulating lists.
>
> Haskell is pretty good about letting you install a different Prelude, so you could try it yourself.
>
> Simon
>
> | -----Original Message-----
> | From: haskell-bounces at haskell.org [mailto:haskell-bounces at haskell.org] On Behalf Of S. Alexander
> | Jacobson
> | Sent: 08 April 2004 04:42
> | To: Haskell Mailing List
> | Subject: [Haskell] overuse of maybe and [] in prelude and libs
> |
> | It feels like the Prelude insists on using [] and
> | Maybe too much.  I keep writing things like this:
> |
> |    foo = foldl union emptySet $ maybe mzero return $ lookup pairs key
> |    goo = maybe emptySet toSomething $ lookup pairs key
> |
> | which really should look like this:
> |
> |    foo = concat $ lookup pairs key
> |    goo = fmap toSomething $ lookup pairs key
> |
> | But, even if we don't have a Monadic/Functor Set,
> | foo should at least be:
> |
> |    foo = foldl union emptySet $ lookup key
> |
> | In other words, shouldn't Prelude define concat
> | and lookup as:
> |
> |    concat = foldr mplus mzero -- (Also, see PS)
> |
> |    lookup key [] = mzero
> |    lookup key ((x,y):xyz)
> |      | key == x = return y
> |      | otherwise = lookup key xyz
> |
> | And if it is a fundamental problem adding
> | constraints to instances, why not add all
> | automatically derivable classes as constraints to
> | all the Prelude classes (esp.  Monad and Functor!)
> | and automatically derive instances of all
> | derivable classes unless the programmer defines
> | his/own methods.
> |
> | -Alex-
> |
> | PS Shouldn't concat be defined with foldl and not
> | foldr?  Doesn't foldr imply that you can't concat
> | infinite lists?  (I know this is a FAQ, but
> | where?)
> |
> | _________________________________________________________________
> | S. Alexander Jacobson                  mailto:me at alexjacobson.com
> | tel:917-770-6565                       http://alexjacobson.com
> | _______________________________________________
> | Haskell mailing list
> | Haskell at haskell.org
> | http://www.haskell.org/mailman/listinfo/haskell
>



More information about the Haskell mailing list