def lift(self, index: int) -> 'maybe.Maybe[A]': return ((maybe.Just(self[index]) if len(self) > index else maybe.Empty()) if index >= 0 else (maybe.Just(self[index]) if len(self) >= -index else maybe.Empty()))
def maybe_call(self, f, *a, **kw): return maybe.Just(f(*a, **kw)) if self else maybe.Empty()
def tail(self) -> 'maybe.Maybe[List[A]]': return maybe.Empty() if self.empty else maybe.Just(self[1:])
def init(self) -> 'maybe.Maybe[List[A]]': return maybe.Empty() if self.empty else maybe.Just(self[:-1])
def index_where(self, fa: List[A], f: Callable[[A], bool]): gen = (maybe.Just(i) for i, a in enumerate(fa) if f(a)) return next(gen, maybe.Nothing)
def tail(self) -> maybe.Maybe['List[A]']: return maybe.Empty() if self.empty else maybe.Just(self[1:])
def init(self) -> maybe.Maybe['List[A]']: return maybe.Empty() if self.empty else maybe.Just(self[:-1])