Functores aplicativos como functores monoidales
Como se menciona en Hackage paraFuncionarios Aplicativos, son fuertes functores monoidales laxos. Entonces, ¿por qué su definición en Haskell no lo muestra así?
class Functor f => MonoidalApplicative f where
mult :: f a -> f b -> f (a,b)
unit :: a -> f a
starAp :: f (a -> b) -> f a -> f b
starAp h x = fmap (uncurry ($)) (mult h x)
<*>
(starAp) se reconstruye fácilmente en términos de multiplicación y esta definición me parece más simple. Por ejemplo, aquí está la instancia de Maybe:
instance MonoidalApplicative Maybe where
mult (Just x) (Just y) = Just (x,y)
mult _ _ = Nothing
unit x = Just x