/// <summary> /// If <paramref name="a"/> can be successfully casted to <typeparamref name="TR"/>, returns the casted one, wrapped as Maybe<TR>, otherwise Nothing /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TR"></typeparam> /// <param name="a"></param> /// <returns></returns> public static Maybe <TR> MaybeCast <T, TR>(this T a) where TR : T { return(MaybeFunctionalWrappers.Catcher <T, TR, InvalidCastException>(o => (TR)o)(a)); }