对typeclass参数的Haskell类型强制
我试着跟随一本机器学习的书,了解一些关于未来内容的知识,我试图使我的代码具有通用性 这是我的密码。我最终将拥有DataSet的其他实例,但这是我目前所拥有的全部对typeclass参数的Haskell类型强制,class,haskell,types,Class,Haskell,Types,我试着跟随一本机器学习的书,了解一些关于未来内容的知识,我试图使我的代码具有通用性 这是我的密码。我最终将拥有DataSet的其他实例,但这是我目前所拥有的全部 data SupervisedDataSet x y = SupervisedDataSet [([x], y)] deriving (Show) class DataSet a where augme
data SupervisedDataSet x y = SupervisedDataSet [([x], y)] deriving (Show)
class DataSet a where
augment :: x -> a -> a --Augment each input vector, making x the head.
instance DataSet (SupervisedDataSet x y) where
augment v (SupervisedDataSet ds) =·
let xsys = unzip ds in
SupervisedDataSet $ zip (map (v:) $ fst xsys) (snd xsys)
我正试图按照GHC中类型检查器的要求,使用augment
的第一个参数强制执行SupervisedDataSet
的第一个参数的类型
Perceptron.hs:16:7:
Couldn't match type `x1' with `x'
`x1' is a rigid type variable bound by
the type signature for
agument :: x1 -> SupervisedDataSet x y -> SupervisedDataSet x y
at Perceptron.hs:14:3
`x' is a rigid type variable bound by
the instance declaration at Perceptron.hs:13:37
Expected type: SupervisedDataSet x1 y
Actual type: SupervisedDataSet x y
In the expression:
SupervisedDataSet $ zip (map (v :) $ fst xsys) (snd xsys)
In the expression:
let xsys = unzip ds
in SupervisedDataSet $ zip (map (v :) $ fst xsys) (snd xsys)
我明白为什么我会收到错误,我只是不知道如何修复它。任何想法都将不胜感激。谢谢
谢谢你抽出时间
class DataSet a where
augment :: x -> a -> a
可以写成
class DataSet a where
augment :: forall x . x -> a -> a
试试看
data SupervisedDataSet x y = SupervisedDataSet [([x], y)] deriving (Show)
class DataSet f where
augment :: a -> f a b -> f a b
instance DataSet SupervisedDataSet where
augment v (SupervisedDataSet ds) =
let xsys = unzip ds in
SupervisedDataSet $ zip (map (v:) $ fst xsys) (snd xsys)
伟大的这是可行的,但我计划添加一个只接受一种参数化类型的实例UnsupervisedDataSet。在我修改我的问题之前,我将自己做这件事。我有一些想法。我设法用它作为我需要的基础。非常感谢。