I'm trying to encode some denotational semantics into Agda based on a program I wrote in Haskell.
data Value = FunVal (Value -> Value)
| PriVal Int
| ConVal Id [Value]
| Error String
In Agda, the direct translation would be;
data Value : Set where
FunVal : (Value -> Value) -> Value
PriVal : ℕ -> Value
ConVal : String -> List Value -> Value
Error : String -> Value
but I get an error relating to the FunVal because;
Value is not strictly positive, because it occurs to the left of an arrow in the type of the constructor FunVal in the definition of Value.
What does this mean? Can I encode this in Agda? Am I going about it the wrong way?
Thanks.