Как описано этот вопрос/ответы, экземпляры Functor
уникальны, если они существуют.
Для списков есть два хорошо известных аппликативных экземпляра: []
и ZipList
. Таким образом Аппликация не уникальна (см. Также Может ли GHC получить Functor и аппликативные экземпляры для монадного трансформатора? и Почему нет расширения -XDeriveApplicative
?). Тем не менее, ZipList
нуждается в бесконечных списках, поскольку его pure
повторяет данный элемент неопределенно.
- Существуют ли другие, возможно, лучшие примеры структур данных, которые имеют как минимум два экземпляра
Applicative
? - Есть ли такие примеры, которые включают только конечные структуры данных? То есть, как если бы гипотетически система типа Haskell отличалась индуктивной и coinductive типами данных, можно было бы однозначно определить аппликативный?
Идем дальше, если бы мы могли расширять как []
, так и ZipList
до Монады, у нас был бы пример, где монада не определяется однозначно типом данных и его Функтором. Увы, ZipList
имеет экземпляр Monad только если мы ограничимся бесконечными списками ().
И return
для []
создает список из одного элемента, поэтому он требует конечных списков. Поэтому:
- Являются ли экземпляры Monad уникальными по типу данных? Или есть пример типа данных, который может иметь два разных экземпляра Monad?
В случае примера с двумя или несколькими отдельными экземплярами возникает очевидный вопрос, если они должны/могут иметь один и тот же аппликативный экземпляр:
- Являются ли экземпляры Monad однозначно определенными аппликативным экземпляром или есть пример аппликатора, который может иметь два разных экземпляра Monad?
- Есть ли пример типа данных с двумя отдельными экземплярами Monad, каждый из которых имеет другой аппликативный супер-экземпляр?
И, наконец, мы можем задать тот же вопрос для Alternative/MonadPlus. Это осложняется тем, что существует два различных набора законов MonadPlus. Предполагая, что мы принимаем один из множества законов (и для Аппликативных мы принимаем правую/левую дистрибутивность/поглощение, см. Также этот вопрос),
- Альтернатива, однозначно определяемая с помощью Applicative, и MonadPlus от Monad, или есть ли какие-либо встречные примеры?
Если какой-либо из вышеперечисленных вариантов уникален, мне было бы интересно узнать, почему, чтобы иметь намек на доказательство. Если нет, встречный пример.