getOrElse<X extends A>(x: () => X): A {
        return this.self.isLeft ? <A>this.self.value : x();
    }