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なら繋いでいけばキレイに実現できるような気がする。