今天我尝试通过monoid类型类减少函数列表,但是由于某种原因,结果函数期望它的参数是Monoid的一个实例.
GHCI告诉我,类型mconcat [id, id, id, id]是Monoid a => a -> a.但我希望它是a -> a.
怎么了?
use*_*560 10
你正在使用这个实例:
instance Monoid b => Monoid (a -> b) where
mempty _ = mempty
mappend f g x = f x `mappend` g x
Run Code Online (Sandbox Code Playgroud)
这更通用,因为它不需要内同胚(即a -> a).要获得您期望的实例,您可以将函数包装在Endo:
appEndo (mconcat [Endo id, Endo id, Endo id, Endo id])
Run Code Online (Sandbox Code Playgroud)
要么
appEndo $ mconcat $ fmap Endo [id, id, id, id]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |