Haskell 输入 class "parse error on input instance"
Haskell type class "parse error on input instance"
我正在做作业,需要一些帮助
任务:
在第一步中,我需要为重载函数 "genDrop" 定义一个新类型 class。它应该表现得像 "drop"(对于 Int),但不限于 Int。
在第二步中,应该为 Int、Nat、PosNat 和 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 _ [] = []
但是在编译时出现错误:
parse error on input 'instance'
instance GenDrop Int where
我不知道怎么了。
instance
声明不是 class
声明的一部分:不要像它们是那样缩进它们。 Haskell.
中的缩进很重要
这是更正后的代码:
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" 定义一个新类型 class。它应该表现得像 "drop"(对于 Int),但不限于 Int。 在第二步中,应该为 Int、Nat、PosNat 和 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 _ [] = []
但是在编译时出现错误:
parse error on input 'instance'
instance GenDrop Int where
我不知道怎么了。
instance
声明不是 class
声明的一部分:不要像它们是那样缩进它们。 Haskell.
这是更正后的代码:
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 _ [] = []