From 6fb192d0a38672c3d9e8d6671625ba9d443c69a3 Mon Sep 17 00:00:00 2001 From: Icelandjack <501899+Icelandjack@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:00:38 +0000 Subject: [PATCH] Applicative, Alternative instances for Cayley. (#109) --- CHANGELOG.markdown | 1 + src/Data/Profunctor/Cayley.hs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) 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..5664b275 100644 --- a/src/Data/Profunctor/Cayley.hs +++ b/src/Data/Profunctor/Cayley.hs @@ -1,7 +1,7 @@ -{-# LANGUAGE DeriveTraversable #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DeriveTraversable #-} +{-# LANGUAGE DerivingVia #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE StandaloneDeriving #-} @@ -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 @@ -46,6 +48,11 @@ 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 (Alternative f, Applicative (p a)) => Alternative (Cayley f p a) + instance Functor f => ProfunctorFunctor (Cayley f) where promap = \f -> Cayley #. fmap f .# runCayley {-# inline promap #-}