[Haskell-cafe] Eta-reducing case branches
Tom Ellis
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Tue Apr 14 21:04:15 UTC 2015
On Sat, Apr 11, 2015 at 01:22:22AM -0700, Erik de Castro Lopo wrote:
> Tom Ellis wrote:
>
> > Likewise, I have often wanted to rewrite
> >
> > case m of
> > Nothing -> n
> > Just x -> quux x
>
> Why not emply the maybe function (b -> (a -> b) -> Maybe a -> b)
>
> maybe n quux m
This is a fine idea which I often use on simple examples like this. My
proposal has some additional benefits
* Closer connection between the names of the constructors and the
alternatives (I always think "is it `maybe n quux` or `maybe quux n`"?.
In fact I made this mistake just today.)
* No need to hand write such a function for each ADT you define (arguably
they could be autogenerated, but that's a different story).
* You could nest matches:
data Foo = Foo (Maybe Int) Bool | Bar String
case m of
Foo (Just 1) -> f
Foo Nothing -> g
Bar "Hello" -> h
More information about the Haskell-Cafe
mailing list