"Elvis" operator (?:) as a reverse infix form of "fromMaybe"

John Lato jwlato at gmail.com
Sat Oct 12 19:31:25 UTC 2013


I'd prefer it if we had an operator in Control.Applicative such as

  |> :: Alternative f => f a -> a -> f a
  l |> r = l <|> pure r

if it doesn't already exist, this would generalize fromMaybe, and
complicated cases could be written as

  maybeA <|> maybeB |> c

but even this could be easily written using <|> and pure, so I'm not sure
it pulls its weight.

John L.


On Sat, Oct 12, 2013 at 7:40 AM, Nikita Volkov <nikita.y.volkov at gmail.com>wrote:

> I suggest to include this operator in "Data.Maybe" and "Prelude".
>
> *Implementation:*
>
>     (?:) :: Maybe a -> a -> a
>     maybeA ?: b = fromMaybe b maybeA
>
> *Use cases:*
>
>     1.
>         maybeValue ?: error "Value is unexpectedly empty. This is a bug."
>
>     instead of
>
>         fromMaybe (error "Value is unexpectedly empty. This is a bug.")
> maybeValue
>
>     2.
>         maybeA ?: maybeB ?: c
>
>     instead of
>
>         fromMaybe (fromMaybe c maybeB) maybeA
>
> *Name collisions:*
>
>     Hayoo search gives only 6 collisions with 5 hardly fundamental
> libraries.
>
>
>
> * The nickname and the operator itself are inspired by the ones from
> Groovy language.
>
> ** The symbols of the operator are a reminder of plain old ternary
> construct.
>
> *** To understand the nickname look at the operator as on emoticon.
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20131012/af502220/attachment.html>


More information about the Libraries mailing list