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 _ [] = []