[Haskell-cafe] Lambda-case / lambda-if

Evan Laforge qdunkan at gmail.com
Tue Oct 5 20:10:43 EDT 2010

-1 for if then.  The examples of "curried" if then else look, to my
eyes, less readable than the pointed version.  And it's easy enough to
write a 'bool' deconstructor, or an 'ifM' for the monadic case.

+1 for something to solve the "dummy <- m; case dummy of" problem.
Here are the possibilities I can think of:

1) case of:

m >>= case of
    Just _ <- z | guard -> a
    _ -> b

2) habit's case<-

case<- m of
    Just _ <- z | guard -> a
    _ -> b

3) extended lambda (not sure what this would look like... would the
below parse with the give layout?)

m >>= \
    Just _ <- z | guard -> a
    _ -> b

To me, #3 looks less ad-hoc and I like the idea of loosening a
restriction instead of introducing more sugar, but I'm not sure how
the syntax would work out.  Also, from another point of view, 'f x =
...' is sugared to combine a \ and a case, while \ is unsugared, so
tacking some case sugar on to \ would introduce sugar in a previously
sugar-free area.  Of course that \ is already sugared to curry
automatically, but if you rephrase this as "add more sugar" rather
than "loosen a restriction" it suddenly becomes less attractive since
now it's just sugar vs. sugar :)

#2 looks the nicest for this specific use, but seems less general than
#1.  For instance, #1 allows "f = case of { ... } . g".

So I like #1.

More information about the Haskell-Cafe mailing list