[Haskell-beginners] case as guards in lambda functions
byorgey at seas.upenn.edu
Wed Nov 10 18:15:31 EST 2010
On Wed, Nov 10, 2010 at 09:58:15PM +0100, Daniel Fischer wrote:
> On Wednesday 10 November 2010 21:13:26, Russ Abbott wrote:
> > I have often wanted to use a guard in a lambda function and had thought
> > it wasn't possible. But apparently the case construct allows a viable
> > approach. Here is a silly example.
> > testCase = map
> > (\xs -> case xs of
> >  -> "empty list"
> > [y] | y < 5 -> "small singleton"
> > | otherwise -> "large singleton"
> > _ -> "multi-element list")
> > > testCase [, , , [1,2,3]]
> > ["empty","small singleton","large singleton","multi-element list"]
> > It seems particularly useful to be able to include both patterns and
> > guards in case expressions. I haven't seen this usage anywhere.
> If it's not a very small case-expression, usually one puts it in a where
> map f list
> f xs = case xs of
Yes, and doing it this way obviates the need for a case expression:
map f list
f  = ...
f [y] | y < 5 = ...
> > Is it considered bad form?
Using patterns and guards in case expressions isn't necessarily bad
form. But it doesn't seem to be that common.
More information about the Beginners