今天我尝试通过monoid类型类减少函数列表,但是由于某种原因,结果函数希望它的参数是Monoid的一个实例。
GHCI告诉我mconcat [id, id, id, id]
的类型是Monoid a => a -> a
。但我希望它是a -> a
。
发生了什么事?
答案 0 :(得分:10)
您正在使用此实例:
a -> a
更为通用,因为它不需要内同态(即Endo
)。要获得您期望的实例,可以将函数包装在appEndo (mconcat [Endo id, Endo id, Endo id, Endo id])
:
appEndo $ mconcat $ fmap Endo [id, id, id, id]
或
en