Что не так с этим конструктором 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 ответ

Решение

Ты дал 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

Поскольку параметр не присутствует ни в одном из значений, я подозреваю, что вы действительно не хотели иметь его там.

Другие вопросы по тегам