diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown index b26950a3..e4e4f6f6 100644 --- a/CHANGELOG.markdown +++ b/CHANGELOG.markdown @@ -1,5 +1,6 @@ 6 [unreleased] -------------- +* `Applicative`, `Alternative` instances for `Cayley` * Removed support for GHC < 8.6 * Inverted dependency between `distributive` v1 and `profunctors` v6 * `Data.Profunctor.Mapping`, `Data.Profunctor.Closed`, `Data.Profunctor.Rep` diff --git a/src/Data/Profunctor/Cayley.hs b/src/Data/Profunctor/Cayley.hs index 6b37d62f..48fbb7c3 100644 --- a/src/Data/Profunctor/Cayley.hs +++ b/src/Data/Profunctor/Cayley.hs @@ -21,11 +21,13 @@ import Control.Arrow as A import Control.Category import Control.Comonad import Data.Biapplicative +import Data.Bifoldable import Data.Bifunctor as B import Data.Bifunctor.Functor -import Data.Bifoldable import Data.Bitraversable import Data.Data +import Data.Functor.Compose +import Data.Kind import Data.Profunctor import Data.Profunctor.Functor import Data.Profunctor.Monad @@ -45,6 +47,10 @@ newtype Cayley f p a b = Cayley { runCayley :: f (p a b) } deriving stock instance (Functor f, Functor (p a)) => Functor (Cayley f p a) deriving stock instance (Foldable f, Foldable (p a)) => Foldable (Cayley f p a) deriving stock instance (Traversable f, Traversable (p a)) => Traversable (Cayley f p a) +deriving via Compose f (p a :: Type -> Type) + instance (Applicative f, Applicative (p a)) => Applicative (Cayley f p a) +deriving via Compose f (p a :: Type -> Type) + instance (Applicative f, Alternative (p a)) => Alternative (Cayley f p a) instance Functor f => ProfunctorFunctor (Cayley f) where promap = \f -> Cayley #. fmap f .# runCayley