尝试创建罗马数字的构造函数:
data RomanDigit a = M | D | C | L | V | I
newRomanDigit :: Int -> RomanDigit
newRomanDigit 1000 = M
newRomanDigit 500 = D
获取错误消息:
in module UserMod
at src\UserMod.purs line 81, column 1 - line 81, column 35
Could not match kind
Type
with kind
Type -> Type
while checking the kind of Int -> RomanDigit
in value declaration newRomanDigit
我在做什么错了?
答案 0 :(得分:7)
您为RomanDigit
提供了类型参数a
,但尚未在newRomanDigit
的声明中为其指定值。
您声明的方式RomanDigit
不是Type
。 RomanDigit Int
是Type
,或者RomanDigit String
是Type
,或者RomanDigit (Array Boolean)
是Type
,但是RomanDigit
本身不是Type
,因为它缺少声明的类型参数a
。这就是编译器告诉您的。
您需要删除参数,例如:
data RomanDigit = M | D | C | L | V | I
或者在使用RomanDigit
时指定它,例如:
newRomanDigit :: Int -> RomanDigit Int
由于该参数不存在于任何值中,因此我怀疑您并不是真的希望将其保存在那里。