Скажем, у меня есть ряд функций:
f :: a -> Maybe a
g :: a -> Maybe a
h :: a -> Maybe a
И я хочу скомпоновать их следующим образом: Если f возвращает Nothing, вычислите g. Если g ничего не возвращает, вычислите h. Если какой-либо из них вычисляет Just a, остановите цепочку. И вся композиция (h. G. F) должна, конечно, вернуться. Возможно, a.
Это противоположность типичному использованию монады Maybe, где обычно вы перестаете вычислять, если ничего не возвращается.
Какая икома Haskell для целых вычислений вроде этого?