如何从实例中的数据定义中获取特定类型?

时间:2017-04-14 01:25:04

标签: haskell

我将假设在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?

1 个答案:

答案 0 :(得分:1)

我不确定您要完成的具体内容,但您可以通过模式匹配访问这些数据类型的部分:

instance Fractal Mandelbrot where
    escapeCount (M maxIter row col c1 c2) c3 = ...

这使得函数中的部件可用作变量maxIterrowcol等。

您可以根据需要进行尽可能多的模式匹配:

escapeCount (M maxIter row col (C real1 imag1) (C real2 imag2)) (C real3 imag3) = ...

另外,我推荐Complex datatype from Data.Complex,而不是制作自己的enter image description here。它已经有一个Num实例,因此您可以像使用普通数字一样添加,减去等等,以及有用函数的基础。