リストに要素が 1 つしか含まれていない場合、それらは に同形Maybeであり、そのために「最初の空でない」モノイドFirstfrom がありData.Monoidます。Maybe aこれは値のラッパーであり、最初の値をmappend返します。Just
import Data.Monoid
main = do
print $ (First $ Just 'a') <> (First $ Just 'b')
print $ (First $ Just 'a') <> (First Nothing)
print $ (First Nothing) <> (First $ Just 'b')
print $ (First Nothing) <> (First Nothing :: First Char)
==> Output:
First {getFirst = Just 'a'}
First {getFirst = Just 'a'}
First {getFirst = Just 'b'}
First {getFirst = Nothing}
変換[a] -> Maybe aは を使用して達成されData.Maybe.listToMaybeます。
余談ですが、これはラップされた型の型クラスを制約しません。あなたの質問では、Eqと等しいかどうかを比較するインスタンスが必要memptyです。Maybeもちろん、これには型を持つという代償が伴います。