Given the following definitions of Functor
and Coproduct
from fp-course:
class Functor f where (<$>) :: (a -> b) -> f a -> f b class Functor f => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b class Functor t => Traversable t where traverse :: Applicative f => (a -> f b) -> t a -> f (t b) data Coproduct f g a = InL (f a) | InR (g a)
Is there a cleaner or more succinct way to implement the following?
instance (Traversable f, Traversable g) =>
Traversable (Coproduct f g) where
traverse ::
Applicative h =>
(a -> h b)
-> Coproduct f g a
-> h (Coproduct f g b)
traverse f (InL fa) = InL <$> traverse f fa
traverse f (InR ga) = InR <$> traverse f ga