此purescript构造函数有什么问题?

时间:2018-08-07 05:11:02

标签: purescript

尝试创建罗马数字的构造函数:

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

我在做什么错了?

1 个答案:

答案 0 :(得分:7)

您为RomanDigit提供了类型参数a,但尚未在newRomanDigit的声明中为其指定值。

您声明的方式RomanDigit不是TypeRomanDigit IntType,或者RomanDigit StringType,或者RomanDigit (Array Boolean)Type,但是RomanDigit本身不是Type,因为它缺少声明的类型参数a。这就是编译器告诉您的。

您需要删除参数,例如:

data RomanDigit = M | D | C | L | V | I

或者在使用RomanDigit时指定它,例如:

newRomanDigit :: Int -> RomanDigit Int

由于该参数不存在于任何值中,因此我怀疑您并不是真的希望将其保存在那里。