如何使用函数的monoid实例?

时间:2017-06-03 13:59:50

标签: haskell monoids

今天我尝试通过monoid类型类减少函数列表,但是由于某种原因,结果函数希望它的参数是Monoid的一个实例。

GHCI告诉我mconcat [id, id, id, id]的类型是Monoid a => a -> a。但我希望它是a -> a

发生了什么事?

1 个答案:

答案 0 :(得分:10)

您正在使用此实例:

a -> a

更为通用,因为它不需要内同态(即Endo)。要获得您期望的实例,可以将函数包装在appEndo (mconcat [Endo id, Endo id, Endo id, Endo id])

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

en