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

Reply via email to