我将假设在Fractal Mandelbrot
的实例中,escapeCount f (C comp3)
f
代表Mandelbrot
数据类型。我如何访问MaxIter等元素。我是否只需为每个我想要的元素编写定义?
type MaxIter = Int
type Row = Int
type Col = Int
data Complex = C Double Double deriving (Show,Eq)
data Mandelbrot = M MaxIter Row Col Complex Complex deriving (Eq)
class (Show f) => Fractal f where
escapeCount :: f -> Complex -> Int
instance Fractal Mandelbrot where
escapeCount f (C comp3) = <- I assume this means that comp3 is of type C?
答案 0 :(得分:1)
我不确定您要完成的具体内容,但您可以通过模式匹配访问这些数据类型的部分:
instance Fractal Mandelbrot where
escapeCount (M maxIter row col c1 c2) c3 = ...
这使得函数中的部件可用作变量maxIter
,row
,col
等。
您可以根据需要进行尽可能多的模式匹配:
escapeCount (M maxIter row col (C real1 imag1) (C real2 imag2)) (C real3 imag3) = ...
另外,我推荐Complex
datatype from Data.Complex
,而不是制作自己的。它已经有一个Num
实例,因此您可以像使用普通数字一样添加,减去等等,以及有用函数的基础。