このようなリストに対する標準的な再帰パターンでは、再帰を明示的に書くよりも、畳込みを使うほうがよいでしょう。そのほうが読みやすく理解しやすいからです。
foldr
の呼び出しは誰が見ても畳み込みですが、明示的な再帰を読むには考える時間が必要です。
再帰を使った場合のコード
findKey:: (Eq k) => k -> [(k, v)] -> Maybe v findKey _ [] = Nothing findKey key ((k, v):xs) | k == key = Just v | otherwise = findKey key xs
foldr
を使った場合のコード
findKey:: (Eq k) => k -> [(k, v)] -> Maybe v findKey = foldr (\(k, v) acc -> if k == key then Just v else acc) Nothing