我试图定义一个函数,将连接两个这样的元组(Int, Char):
tupleCat :: (Integral a, Char b )=> (a, b) -> (a, b) -> (a, [Char])
tupleCat (x1, y1) (x2, y2) =(x1+ x2, [y1] ++ [y2])
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
Type constructor `Char' used as a class ...
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Char 没有类型类,它是一个类型:
tupleCat :: (Integral a) => (a, Char) -> (a, Char) -> (a, [Char])
tupleCat (x1, y1) (x2, y2) =(x1 + x2, [y1] ++ [y2])
Run Code Online (Sandbox Code Playgroud)
如果你真的想要Ints而不是a Integral,它们也是类型:
tupleCat :: (Int, Char) -> (Int, Char) -> (Int, [Char])
tupleCat (x1, y1) (x2, y2) =(x1+ x2, [y1] ++ [y2])
Run Code Online (Sandbox Code Playgroud)
此外,您可以考虑将此类型设置为新类型并实现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)
Run Code Online (Sandbox Code Playgroud)
随着这个定义tupleCat变得简单mappend.然后你可以例如Cat在每个中连接s Foldable(例如列表).当然我不知道你的意图,所以这只是一个有根据的猜测.
| 归档时间: |
|
| 查看次数: |
3469 次 |
| 最近记录: |