Próbuję zakodować pewne denotujące semantyki w Agdzie w oparciu o program napisany w Haskell."Ściśle pozytywnie" w Agdzie
data Value = FunVal (Value -> Value)
| PriVal Int
| ConVal Id [Value]
| Error String
W Agdzie, bezpośrednie tłumaczenie byłoby;
data Value : Set where
FunVal : (Value -> Value) -> Value
PriVal : ℕ -> Value
ConVal : String -> List Value -> Value
Error : String -> Value
ale pojawia się błąd związany z FunVal ponieważ;
Wartość nie jest ściśle dodatnia, ponieważ pojawia się po lewej stronie na strzałką w rodzaju FunVal konstruktora w definicji Value.
Co to oznacza? Czy mogę zakodować to w Agdzie? Czy podchodzę do tego w niewłaściwy sposób?
Dzięki.
Możesz być zainteresowany PHOAS, wyjaśnione przez Chlipala [tutaj] (http://adam.chlipala.net/papers/PhoasICFP08/PhoasICFP08.ps). – danr
Dzięki. Od tego czasu miałem trochę zabawy. –