显示自定义复杂数据 class

Showing custom complex data class

我刚开始学习 数据,我正在尝试用它来定义复数。

到目前为止我有以下内容:

data Complex = Complex Int Int deriving(Eq)

instance Show Complex where
    show Complex a = a -- Not working

instance Num Complex where
    Complex a b + Complex c d = Complex (a+c) (b+d)
    -- etc.

我想做的是实例化 Show 以使程序打印出像复数一样的字符串,例如:"a + bi"

我明白为什么我写的代码会出错,因为 a 的类型是 Complex 并且程序需要一个字符串,但我无法理解如何将两个数字分开然后将“i”添加到 b , 以及将运算符放在中间。

有什么想法吗?

show Complex a = a

定义了一个函数show,有两个个参数,第一个参数是Complex,第二个参数是a。这处理了 class Showshow 的签名,我们只找到一个参数。

由于该参数必须是 Complex,您可能需要

show (Complex a b) = show a ++ " + " ++ show b ++ "i"

注意我们如何在 ab 上使用 show 类型 Int 将它们转换为字符串,然后使用 [=22 连接一堆字符串=].

另请注意,当 b 为负时,上述输出不是最优的。您可能希望相应地更改函数。