![](/img/trans.png)
[英]How do I handle the Maybe result of at in Control.Lens.Indexed without a Monoid instance
[英]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.