gpt4 book ai didi

haskell - 如何使用函数的幺半群实例?

转载 作者:行者123 更新时间:2023-12-03 14:27:21 24 4
gpt4 key购买 nike

今天我试图通过 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]

关于haskell - 如何使用函数的幺半群实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com