Maybe型を返す関数を繋いで、最初のJustを手にいれたい

a -> Maybe bみたいな関数があって、最初のJustが欲しいことがある
要するに、

case f x of
  j@(Just _) ->
      j
  Nothing ->
      case g x of
        j@(Just _) ->
            j
        Nothing ->
            ...

と同じことを簡単にやってくれる何かが欲しい。

高階関数で実現するなら、

import Data.List
import Data.Maybe

findMap :: [(a -> Maybe b)] -> a -> Maybe b
findMap fs x = fromJust $ find isJust $ map (\f -> f x) fs

みたいになるし、似たことを下でもやってる。

ただ、なんとなくMaybeモナドに似てる気がするんだよなぁ。こう、Someなら繋いでいくやつの逆で、Nothingなら繋いでいけばキレイに実現できるような気がする。