У меня есть два тесно связанных вопроса:
Во-первых, как класс Haskell Arrow может быть смоделирован/представлен в Agda?
class Arrow a where
arr :: (b -> c) -> a b c
(>>>) :: a b c -> a c d -> a b d
first :: a b c -> a (b,d) (c,d)
second :: a b c -> a (d,b) (d,c)
(***) :: a b c -> a b' c' -> a (b,b') (c,c')
(&&&) :: a b c -> a b c' -> a b (c,c')
(следующая Сообщение в блоге гласит, что это должно быть возможно...)
Во-вторых, в Haskell (->)
является первоклассным гражданином и просто еще одним типом более высокого порядка, и его просто определить (->)
как один экземпляр класса Arrow
. Но как это происходит в Агда? Я мог ошибаться, но я чувствую, что Agdas ->
является более неотъемлемой частью Agda, чем Haskell ->
. Таким образом, Agdas ->
можно рассматривать как тип более высокого порядка, т.е. Функцию типа, дающую Set
, которая может быть сделана экземпляром Arrow
?