Я пытаюсь закодировать некоторую денотационную семантику в Agda на основе программы, которую я написал на Haskell.
data Value = FunVal (Value -> Value)
| PriVal Int
| ConVal Id [Value]
| Error String
В Agda прямой перевод будет таким:
data Value : Set where
FunVal : (Value -> Value) -> Value
PriVal : ℕ -> Value
ConVal : String -> List Value -> Value
Error : String -> Value
но я получаю сообщение об ошибке, относящееся к FunVal, потому что;
Значение не является строго положительным, поскольку оно встречается слева от стрелки в типе конструктора FunVal в определении Value.
Что это значит? Могу я закодировать это в Agda? Я ошибаюсь?
Спасибо.