Почему класс типов Alternative должен быть подклассом Control.Applicative?

Haskell предоставляет стандартный класс типов «Альтернативный», который эффективно предоставляет оператор <|> для любого типа, который также является аппликативным.

Насколько я понимаю, альтернатива считается моноидом для аппликативных, однако оператор <|>, кажется, имеет смысл во многих типах, которые также не являются аппликативными функторами, и нет необходимости в какой-либо конкретной зависимости от класса аппликативных типов. чтобы он работал правильно.

Есть ли причина, по которой Alternative должен быть подклассом Applicative, и если да, то существует ли стандартный класс типов для определения аналогичной функциональности для неаппликативных типов?


person James Davies    schedule 27.05.2015    source источник
comment
Monoid будет классом для неаппликативных типов.   -  person Lee    schedule 27.05.2015
comment
@ Ли, это не совсем корректно, поскольку Monoid - это класс типов, а Alternative - класс конструкторов типов. Я хотел бы иметь локальные количественные ограничения на конструкторы типов, такие как (forall a. Monoid f a), но это не разрешено.   -  person pigworker    schedule 27.05.2015
comment
Технически альтернатива — это просто Monoid для Applicatives, поэтому Monoid кажется более распространенным случаем, поскольку я понимаю, что ожидаемое использование оператора <|> — это Pick или ore другой, который несколько отличается от mconcat?   -  person James Davies    schedule 27.05.2015
comment
Мне кажется, что все классы типов теории категорий немного запутаны, в основном из-за исторических соображений (то есть обратной совместимости). Я думаю, что это актуально: stackoverflow .com/questions/10167879/   -  person MathematicalOrchid    schedule 27.05.2015


Ответы (1)


Я думаю, что Alt из пакета semigroupoids наиболее близок к тому, чтобы быть «стандартным» классом типов. https://hackage.haskell.org/package/semigroupoids-5.0.0.1/docs/Data-Functor-Alt.html#t:Alt

person Sjoerd Visscher    schedule 27.05.2015
comment
Было бы лучше, если бы Alt был суперклассом Alternative, а Apply суперклассом Applicative, не так ли? - person imz -- Ivan Zakharyaschev; 18.06.2015
comment
И я, кажется, скучаю по экземпляру для работы с этим Alt как с полугруппой. (Аналогично типу Alt newtype, что позволяет использовать Alternative в качестве моноида.) - person imz -- Ivan Zakharyaschev; 18.06.2015
comment
К сожалению, поскольку это полугруппа, в ней нет altEmpty :: f a. - person Tom Ellis; 14.04.2018