错误:不在范围内:类型变量[Haskell]

时间:2018-05-05 18:58:04

标签: haskell

我想要一个数据类型

的数值列表

data Polynomial = Polynomial {xs ::(Num a) => [a] } deriving (Show)

但我仍然收到此错误

error: Not in scope: type variable ‘a’

2 个答案:

答案 0 :(得分:8)

根据Haskell wiki

  

在Haskell 98中,只有函数可以有类型约束。

为了做你想做的事,你可以用类型参数声明data Polynomial a = Polynomial xs deriving (Show) 。然后用适当的类型约束编写函数。

Polynomial Int

这允许您构建具体的多项式类型,例如Polynomial FloatPolynomial String或甚至Polynomial。在(+) :: (Num a) => Polynomial a -> Polynomial a -> Polynomial a 类型上运行的函数可以声明类型参数的约束。例如,添加两个多项式的函数可以具有以下签名:

double

根据每项功能进行冲洗并重复。

答案 1 :(得分:0)

如果您有权访问ExistentialQuantification语言扩展名,则可以执行以下操作:

data Polynomial = forall a. Num a => Polynomial { xs :: [a] }

您还可以使用StandaloneDeriving派生Show:

data Polynomial = forall a. (Show a, Num a) => Polynomial { xs :: [a] }
deriving instance Show Polynomial