public static Maybe <T> Collapse <T>(this Maybe <Maybe <T> > t) => t;    // using implicit cast

        /// <summary>
        /// Flattens a recursive Maybe structure into IEnumerable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="maybe"></param>
        /// <param name="parentSelector"></param>
        /// <example>
        /// Having { a: 1, parent: { a: 2, parent: { a: 3, parent: Nothing } } }
        /// We can flatten it to
        /// [
        ///		{ a: 1, parent: { a: 2, parent: { a: 3, parent: Nothing } } },
        ///		{ a: 2, parent: { a: 3, parent: Nothing } } ,
        ///		{ a: 3, parent: Nothing }
        ///	]
        /// </example>
        /// <returns></returns>
        public static IEnumerable <T> Flatten <T>(this Maybe <T> maybe, Func <T, Maybe <T> > parentSelector) =>
        maybe.FlattenSelect(parentSelector, x => x);