Что не так с этим конструктором 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
Поскольку параметр не присутствует ни в одном из значений, я подозреваю, что вы действительно не хотели иметь его там.