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.