gpt4 book ai didi

Haskell 元组连接函数定义问题

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

我正在尝试定义一个函数,它将连接两个 (Int, Char) 元组,如下所示:

tupleCat :: (Integral a, Char b )=> (a, b) ->  (a, b) -> (a, [Char])
tupleCat (x1, y1) (x2, y2) =(x1+ x2, [y1] ++ [y2])

但是,我收到以下错误消息:

Type constructor `Char' used as a class ...

我做错了什么?

最佳答案

Char 不是类型类,它是一个类型:

tupleCat :: (Integral a) => (a, Char) ->  (a, Char) -> (a, [Char])
tupleCat (x1, y1) (x2, y2) =(x1 + x2, [y1] ++ [y2])

如果您真的想要 Int 而不是 Integral,它们也是类型:

tupleCat :: (Int, Char) ->  (Int, Char) -> (Int, [Char])
tupleCat (x1, y1) (x2, y2) =(x1+ x2, [y1] ++ [y2])

此外,您可能会考虑将其设为新类型并实现 Monoid 类型类(如评论中所建议)。一种可能是

newtype Cat = Cat (Int, String)

instance Monoid Cat where
mempty = Cat (0, [])
mappend (Cat (i1,s1)) (Cat (i2,s2)) = Cat (i1 + i2, s1 ++ s2)

有了这个定义,tupleCat 就变成了mappend。然后你可以,例如连接每个 Foldable(例如列表)中的 Cat。当然我不知道你的意图,所以这只是一个有根据的猜测。

关于Haskell 元组连接函数定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6450851/

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