Есть ли Функтор, который не может быть законопослушным?

A недавний вопрос обычно спрашивают о границах между различными классами Haskell. Я придумалHandler в качестве примера действительногоFunctor безздравомыслящий экземплярApply**, где

class Functor f => Apply f where
  (<.>) :: f (a -> b) -> f a -> f b
  -- optional bits omitted.

Тем не менее, я еще не смог найти пример действительногоFunctor это не может быть сделанодействительный (если бессмысленно) экземплярApply, Дело в том, чтоApply имеет был (см. обновление), но один закон,

(.) <
(.) <$> u <.> v <.> w = u <.> (v <.> w)
gt; u <.> v <.> w = u <.> (v <.> w)

кажется, сделать это довольно сложно.

свиновод (Конор МакБрайд) ранеедал пример изFunctor это неApplicative, но он полагался наpure сделать это, и это не доступно вApply.

** Позже я понял, что на самом деле может быть разумным (хотя и немного странным)Apply экземпляр дляHandler, что концептуально собирает одновременные исключения.

Обновить

Эдвард Кметт теперьпринято два дополнительных закона, которые я предложил дляApply (чтобы подтвердить оптимизацию, которую я сделал дляApply (Coyoneda f) пример):

x <.> (f <
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y
gt; y) = (. f) <
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y
gt; x <.> y f <
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y
gt; (x <.> y) = (f .) <
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y
gt; x <.> y

Было бы интересно посмотреть, изменят ли эти дополнения ответ на этот вопрос.

Ответы на вопрос(3)

Ваш ответ на вопрос