Практически так для WrappedMonad
. Я предполагаю, что он становится (и, возможно, уже был) существенно устаревшим. Но WrappedArrow
сложнее, потому что типы Arrow
и Applicative
имеют разные виды, * -> * -> *
- * -> *
. И из-за способа разрешения экземпляра GHC работает, добавляя экземпляр (я предполагаю, что дополнительный Arrow
опечатка)
instance Arrow a => Applicative (a b)
будет означать, что не конструктор типа с двумя или более аргументами тогда не мог дать Applicative
без также давая Arrow
- это кажется довольно резким.
Обратный вариант добавления суперкласс Applicative (a b) =>
к Arrow a
будет казаться более приемлемым - разве вы не можете иметь суперкласса с forall'ed типа как b
. Такие суперклассы были бы полезны и для других вещей, и их много раз предлагали, поэтому я предполагаю, что их трудно реализовать.
Это также случай, когда большинство людей считают класс 'Arrow' неправильным, поэтому сделать его суперклассом чрезвычайно важного класса« Applicative », вероятно, не будет так хорошо. – dfeuer
Подкласс @dfeuer, а не суперкласс. Это не повлияет непосредственно на «Аппликативный». Тем не менее, невозможно с текущей системой классов. –
Ах, я пропустил вашу мысль, я думаю. – dfeuer