                        : default(R);
        }


        public static R? Bind<T, R>(this T? self, Func<T, R?> Some, Func<R?> None)
            where T : struct
            where R : struct
        {
            return self.HasValue
                        ? Some(self.Value)
                        : None();
        }
    }
}
