gpt4 book ai didi

haskell - 如何求和{getSum = 0}?

转载 作者:行者123 更新时间:2023-12-02 13:20:22 25 4
gpt4 key购买 nike

我有以下实例实现:

newtype Constant a b =
Constant { getConstant :: a }
deriving (Eq, Ord, Show)

type TI a = Constant a

instance Functor (Constant a) where
fmap _ (Constant a) = Constant a

instance Foldable (Constant a) where
foldMap _ _ = mempty

然后我尝试了以下操作:

*ExerciseTraversable Data.Monoid> foldMap id (Constant (Sum 34))
()

我确实希望使用 Sum {getSum = 0} 而不是 ()。如何获取 Sum {getSum = 0} 作为结果?

最佳答案

我猜 GHCi 选择了 foldMap id (Constant (Sum 34))::IO (),它顺便进行了类型检查,因为 Constant (Sum 34)::Constant (Sum Int) b 表示任何 b,包括 b ~ IO ()

消除类型歧义,以便 GHCi 不会为您默认它:

foldMap id (Constant (Sum 34)) :: Sum Int
-- or
foldMap id (Constant (Sum 34) :: Constant (Sum Int) (Sum Int))

顺便说一句,foldMap id (Constant "hello"::Constant String (Sum Int)) 也应该可以工作 - Constant 的内容之间没有关系及其幻像索引。

关于haskell - 如何求和{getSum = 0}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946601/

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