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
