[Haskell] overuse of maybe and [] in prelude and libs
Simon PeytonJones
simonpj at microsoft.com
Thu Apr 8 09:58:04 EDT 2004
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: haskellbounces at haskell.org [mailto:haskellbounces 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:9177706565 http://alexjacobson.com
 _______________________________________________
 Haskell mailing list
 Haskell at haskell.org
 http://www.haskell.org/mailman/listinfo/haskell
More information about the Haskell
mailing list