Class Haskell类型类“;输入实例上的分析错误";
我正在做作业,需要一些帮助 任务: 在第一步中,我需要为重载函数“genDrop”定义一个新的类型类。它的行为应该类似于“drop”(对于Int),但不限于Int。 在第二步中,应该为Int、Nat、PosNat和Int'类型实例化它 下面是我的代码:Class Haskell类型类“;输入实例上的分析错误";,class,haskell,typeclass,Class,Haskell,Typeclass,我正在做作业,需要一些帮助 任务: 在第一步中,我需要为重载函数“genDrop”定义一个新的类型类。它的行为应该类似于“drop”(对于Int),但不限于Int。 在第二步中,应该为Int、Nat、PosNat和Int'类型实例化它 下面是我的代码: class GenDrop a where genDrop :: a -> [a] -> [a] instance GenDrop Int where genDrop 0 s = s
class GenDrop a where
genDrop :: a -> [a] -> [a]
instance GenDrop Int where
genDrop 0 s = s
genDrop n (_:s) | n>0 = genDrop (n-1) s
genDrop _ [] = []
instance GenDrop Nat where
genDrop Zero s = s
genDrop (Succ n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop PosNat where
genDrop One (_:s)= s
genDrop (Succ' n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop Int' where
genDrop Zero' s = s
genDrop (Plus n) (_:s) = genDrop n s
genDrop (Minus n) s = s
genDrop _ [] = []
但在编译时,我遇到了一个错误:
输入“实例”上的分析错误实例GenDrop Int,其中
我不知道出了什么问题。实例声明不是
类
声明的一部分:不要将它们缩进,好像它们是。缩进在哈斯克尔很重要
以下是更正后的代码:
class GenDrop a where
genDrop :: a -> [a] -> [a]
instance GenDrop Int where
genDrop 0 s = s
genDrop n (_:s) | n>0 = genDrop (n-1) s
genDrop _ [] = []
instance GenDrop Nat where
genDrop Zero s = s
genDrop (Succ n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop PosNat where
genDrop One (_:s)= s
genDrop (Succ' n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop Int' where
genDrop Zero' s = s
genDrop (Plus n) (_:s) = genDrop n s
genDrop (Minus n) s = s
genDrop _ [] = []
实例
声明不是类
声明的一部分:不要将它们缩进,就好像它们是。缩进在哈斯克尔很重要
以下是更正后的代码:
class GenDrop a where
genDrop :: a -> [a] -> [a]
instance GenDrop Int where
genDrop 0 s = s
genDrop n (_:s) | n>0 = genDrop (n-1) s
genDrop _ [] = []
instance GenDrop Nat where
genDrop Zero s = s
genDrop (Succ n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop PosNat where
genDrop One (_:s)= s
genDrop (Succ' n) (_:s) = genDrop n s
genDrop _ [] = []
instance GenDrop Int' where
genDrop Zero' s = s
genDrop (Plus n) (_:s) = genDrop n s
genDrop (Minus n) s = s
genDrop _ [] = []
这可能无关紧要,但这里的定义是:data Nat=Zero | such Nat data PosNat=One | such'PosNat data Int'=Zero'|加上PosNat |减去PosNat这里的缩进是否与代码中的缩进相同?您需要将
实例
定义移到类
声明之外。您需要缩进实例,以便单词实例
与单词类
在同一列开始,即在行的最开头。太好了!就这样!这几乎把我逼疯了。谢谢这可能无关紧要,但这里的定义是:data Nat=Zero | such Nat data PosNat=One | such'PosNat data Int'=Zero'|加上PosNat |减去PosNat这里的缩进是否与代码中的缩进相同?您需要将实例
定义移到类
声明之外。您需要缩进实例,以便单词实例
与单词类
在同一列开始,即在行的最开头。太好了!就这样!这几乎把我逼疯了。谢谢