maximum
のような一般化された関数を作成しようとしましたPrelude
。私の最初の素朴なアプローチは次のようになりました。
maximum' :: (F.Foldable a, Ord b) => a b -> Maybe b
maximum' mempty = Nothing
maximum' xs = Just $ F.foldl1 max xs
ただし、テストするとNothing
、入力に関係なく常に返されます。
> maximum' [1,2,3]
> Nothing
モノイド型インスタンスの空の値を取得することは可能でしょうか。私が書いたテスト関数は正しく動作します:
getMempty :: (Monoid a) => a -> a
getMempty _ = mempty
> getMempty [1,2,3]
> []
私はすでにこれらの2つの質問を見ていましたが、答えが私の問題をどのように解決するかわかりませんでした:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set
maximum'
関数を機能させるにはどうすれば書き直せますか?