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)
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