¿Hay un Functor que no puede ser un aplicante respetuoso de la ley?

A pregunta reciente preguntó generalmente sobre los límites entre varias clases de Haskell. se me ocurrioHandler como ejemplo de un validoFunctor con ningúnsensato en vez deApply**, dónde

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

Sin embargo, todavía no he podido encontrar un ejemplo de un válidoFunctor eso no se puede hacer unválido (si no tiene sentido) instancia deApply. El hecho de queApply tiene tenía (ver actualización) pero una sola ley,

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

Parece que esto es bastante complicado.

trabajador porcino (Conor McBride) anteriormentedio un ejemplo de unFunctor eso no esApplicative, pero confió enpure para hacerlo, y eso no está disponible enApply.

** Luego, me di cuenta de que en realidad podría ser sensible (aunque un poco extraño)Apply instancia paraHandler, que conceptualmente recoge excepciones simultáneas.

Actualizar

Edward Kmett tiene ahoraaceptado dos leyes adicionales que propuse paraApply (para validar las optimizaciones que hice alApply (Coyoneda f) ejemplo):

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

Sería interesante ver si estas adiciones cambian la respuesta a esta pregunta.

Respuestas a la pregunta(3)

Su respuesta a la pregunta