是否可以编写类似以下内容的内容:

data SomeData = SomeValue | (Integral a) => SomeConstructor a


又怎么会这样写呢?

最佳答案

这类似于Daniel Pratt的回答,但是更典型的方法是在数据定义上放弃类型约束,如下所示:

data SomeData a = SomeValue
                | SomeConstructor a


相反,您应该将(Integral a)约束放在所有需要它的函数上,即使您也将该约束添加到数据定义中,也必须这样做。将约束放在数据定义上并不会给您带来任何好处,但会迫使您在所有SomeData用途(即使根本不在乎a是什么的用途)上都施加约束。有关更多信息,请参见Chapter 10 of Real World Haskell

09-13 04:27
查看更多