Использование монады Maybe в обратном направлении

Допустим, у меня есть несколько функций:

f :: a -> Maybe a
g :: a -> Maybe a
h :: a -> Maybe a

И я хочу скомпоновать их следующим образом: Если f не возвращает ничего, вычислите g. Если g не возвращает ничего, вычислите h. Если кто-то из них вычислит Just a, остановите цепочку. И вся композиция (h. G. F), конечно же, должна возвращать Maybe a.

Это обратное типичному использованию монады Maybe, когда обычно вы прекращаете вычисления, если возвращается Nothing.

Что такое Haskell идиома для объединения таких вычислений?

39
задан Matt Fenwick 8 October 2012 в 19:30
поделиться