ХГ
applyOptional :: Optional (a -> b) -> Optional a -> Optional b
applyOptional f a = bindOptional (\f' -> mapOptional f' a) f
applyOptional' :: Optional (a -> b) -> Optional a -> Optional b
applyOptional' _ Empty = Empty
applyOptional' (Full f) (Full x) = Full (f x)