-type maybe(A) :: {just, A} | nothing.
-spec '>>='(maybe(A), fun((A) -> maybe(B))) -> maybe(B).
-spec fail(any()) -> maybe(_A).
-spec mplus(maybe(A), maybe(A)) -> maybe(A).
-spec mzero() -> maybe(_A).
-spec return(A) -> maybe(A).