簡體   English   中英

如何使用函數的monoid實例?

[英]How do I use a monoid instance of a function?

今天我嘗試通過monoid類型類減少函數列表,但是由於某種原因,結果函數期望它的參數是Monoid的一個實例。

GHCI告訴我mconcat [id, id, id, id]Monoid a => a -> a 但我希望它是a -> a

怎么了?

你正在使用這個實例:

instance Monoid b => Monoid (a -> b) where
    mempty _ = mempty
    mappend f g x = f x `mappend` g x

這更通用,因為它不需要內同胚(即a -> a )。 要獲得您期望的實例,您可以將您的函數包裝在Endo

appEndo (mconcat [Endo id, Endo id, Endo id, Endo id])

要么

appEndo $ mconcat $ fmap Endo [id, id, id, id]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM