gpt4 book ai didi

新类型的 Haskell Monoid 实例问题

转载 作者:行者123 更新时间:2023-12-02 02:11:12 24 4
gpt4 key购买 nike

我正在尝试定义一个实例:

newtype Join a = Join { getJoin :: a -> Bool }
deriving Generic

instance Monoid (Join a) where
f <> g = ???
mempty = ???
目标是如果列表中的所有函数都为真,则函数 foldMap Join 应该返回 True,如果所有函数都不为真,则返回 false。
我了解 foldMap,以及 Monoid 的 Sum 和 Product 的实例,但是对于编写 Monoid 的新类型实例来说还是很陌生的。任何正确方向的帮助将不胜感激。谢谢你。

最佳答案

您可以创建一个返回 True 的新函数如果第一个和第二个函数都返回 True , 通过使用 (&&) .然后 memptyJoin函数是True对于所有输入:

instance Monoid (Join a) where
Join f <> Join g = Join (\x -> f x && g x)
mempty = Join (const True)
自推出 Semigroup , (<>)函数是 Semigroup 的一个实例然而:
import Control.Applicative(liftA2)

instance Semigroup (Join a) where
Join f <> Join g = Join (liftA2 (&&) f g)

instance Monoid (Join a) where
mappend = (<>)
mconcat js = Join (\x -> all (($ x) . getJoin) js)
mempty = Join (const True)

关于新类型的 Haskell Monoid 实例问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62982832/

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