如何声明我的属性属于记录中的某个类型类?

Tom*_*ton 1 haskell functional-programming record

我想说我的记录属性必须属于一个类型类,因此它们不受该类型类中的特定类型的限制。我想要做的代码示例:

data Complex = Complex {
    real :: Num a => a,
    imag :: Num b => b
}
Run Code Online (Sandbox Code Playgroud)

这是可能的,如果是这样,如何?

che*_*ner 8

通常,您会参数化类型本身

data Complex a b = Complex { real :: a, image :: b }
Run Code Online (Sandbox Code Playgroud)

或者更有可能

data Complex a = Complex { real :: a, image :: a }
Run Code Online (Sandbox Code Playgroud)

并对使用该类型的任何函数施加约束:

foo :: Num a => Complex a -> a
foo c = 3 * real c - 5 * imag c
Run Code Online (Sandbox Code Playgroud)

或者

bar :: Num a => Complex a -> Complex a
bar (Complex r i) = Complex (3 * r) (negate (5 * i))
Run Code Online (Sandbox Code Playgroud)