[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