我想要一个数据类型
的数值列表 data Polynomial = Polynomial {xs ::(Num a) => [a] } deriving (Show)
但我仍然收到此错误
error: Not in scope: type variable ‘a’
答案 0 :(得分:8)
在Haskell 98中,只有函数可以有类型约束。
为了做你想做的事,你可以用类型参数声明data Polynomial a = Polynomial xs
deriving (Show)
。然后用适当的类型约束编写函数。
Polynomial Int
这允许您构建具体的多项式类型,例如Polynomial Float
或Polynomial 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