public virtual Option <C> CIfPresent() => Alg.None <C>();
public virtual Option <A> AIfPresent() => Alg.None <A>();
public virtual Option <B> BIfPresent() => Alg.None <B>();
public Option <I3> I3IfPresent() => (mWhich == 3) ? Alg.Some <I3>((I3)mData) : Alg.None <I3>();
public Option <I2> I2IfPresent() => (mWhich == 2) ? Alg.Some <I2>((I2)mData) : Alg.None <I2>();
public Option <I1> I1IfPresent() => (mWhich == 1) ? Alg.Some <I1>((I1)mData) : Alg.None <I1>();
public Option <I0> I0IfPresent() => (mWhich == 0) ? Alg.Some <I0>((I0)mData) : Alg.None <I0>();
public static Option <Value> GetValueIfPresent <Key, Value>(this Dictionary <Key, Value> dictionary, Key key) { return((dictionary.TryGetValue(key, out var r)) ? Alg.Some(r) : Alg.None <Value>()); }