リストに要素が 1 つしか含まれていない場合、それらは に同形Maybe
であり、そのために「最初の空でない」モノイドFirst
from があり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
もちろん、これには型を持つという代償が伴います。