[Haskell] overuse of maybe and [] in prelude and libs

Simon Peyton-Jones 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: 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