@Override default Option<Seq<T>> tailOption() { return isEmpty() ? Option.none() : Option.some(tail()); }
@Override default Option<Seq<T>> initOption() { return isEmpty() ? Option.none() : Option.some(init()); }
@Override public Option<Array<T>> initOption() { return isEmpty() ? Option.none() : Option.some(init()); }
@Override default Option<T> headOption() { return isEmpty() ? Option.none() : Option.some(head()); }
@Override public Option<Array<T>> tailOption() { return isEmpty() ? Option.none() : Option.some(tail()); }