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/describingandevaluatingapiusabilityatmic... 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@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@haskell.org [mailto:haskell-bounces@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@alexjacobson.com | tel:917-770-6565 http://alexjacobson.com | _______________________________________________ | Haskell mailing list | Haskell@haskell.org | http://www.haskell.org/mailman/listinfo/haskell