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