Alas, no. Simon
| -----Original Message----- | From: S. Alexander Jacobson [mailto:[EMAIL PROTECTED] | Sent: 08 April 2004 17:25 | To: Simon Peyton-Jones | Cc: Haskell Mailing List | Subject: Coginitive Dimensions and Haskell (was RE: [Haskell] overuse of maybe and [] in prelude and | libs) | | 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:[EMAIL PROTECTED] | 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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 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:[EMAIL PROTECTED] | > | tel:917-770-6565 http://alexjacobson.com | > | _______________________________________________ | > | Haskell mailing list | > | [EMAIL PROTECTED] | > | http://www.haskell.org/mailman/listinfo/haskell | > _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
