Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions src/Data/Profunctor/Distributor.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,25 @@ import Control.Monad
import Data.Bifunctor.Clown
import Data.Bifunctor.Joker
import Data.Bifunctor.Product
import Data.Complex
import Data.Distributive
import Data.Functor.Adjunction
import Data.Functor.Compose
import Data.Functor.Contravariant.Divisible
import qualified Data.Functor.Product as Functor
import qualified Data.Functor.Sum as Functor
import qualified Data.Monoid as Monoid
import Data.Profunctor hiding (WrappedArrow)
import Data.Profunctor qualified as Pro (WrappedArrow)
import Data.Profunctor.Cayley
import Data.Profunctor.Composition
import Data.Profunctor.Monad
import Data.Profunctor.Yoneda
import Data.Proxy
import Data.Sequence (Seq)
import Data.String
import Data.Tagged
import Data.Vector (Vector)
import Data.Void
import GHC.Generics
import Witherable
Expand Down Expand Up @@ -316,6 +322,22 @@ instance Homogeneous Par1 where
homogeneously = dimap unPar1 Par1
instance Homogeneous Identity where
homogeneously = dimap runIdentity Identity
instance Homogeneous Monoid.Dual where
homogeneously = dimap Monoid.getDual Monoid.Dual
instance Homogeneous Monoid.Product where
homogeneously = dimap Monoid.getProduct Monoid.Product
instance Homogeneous Monoid.Sum where
homogeneously = dimap Monoid.getSum Monoid.Sum
instance Homogeneous (Tagged s) where
homogeneously = dimap unTagged Tagged
instance Homogeneous U1 where
homogeneously _ = pure U1
instance Homogeneous (K1 i ()) where
homogeneously _ = pure (K1 ())
instance Homogeneous (Const ()) where
homogeneously _ = pure (Const ())
instance Homogeneous Proxy where
homogeneously _ = pure Proxy
instance (Homogeneous s, Homogeneous t)
=> Homogeneous (s :.: t) where
homogeneously
Expand All @@ -326,12 +348,6 @@ instance (Homogeneous s, Homogeneous t)
homogeneously
= dimap getCompose Compose
. homogeneously . homogeneously
instance Homogeneous U1 where
homogeneously _ = dimap (const ()) (const U1) oneP
instance Homogeneous (K1 i ()) where
homogeneously _ = dimap (const ()) (const (K1 ())) oneP
instance Homogeneous (Const ()) where
homogeneously _ = dimap (const ()) (const (Const ())) oneP
instance (Homogeneous s, Homogeneous t)
=> Homogeneous (s :*: t) where
homogeneously p = dimap2
Expand All @@ -350,6 +366,10 @@ instance (Homogeneous s, Homogeneous t)
(homogeneously p)
instance Homogeneous V1 where
homogeneously _ = dimap (\case) (\case) zeroP
instance Homogeneous (K1 i Void) where
homogeneously _ = dimap unK1 K1 zeroP
instance Homogeneous (Const Void) where
homogeneously _ = dimap getConst Const zeroP
instance (Homogeneous s, Homogeneous t)
=> Homogeneous (s :+: t) where
homogeneously p = dialt
Expand All @@ -368,11 +388,19 @@ instance (Homogeneous s, Homogeneous t)
(homogeneously p)
instance Homogeneous t
=> Homogeneous (M1 i c t) where
homogeneously p = dimap unM1 M1 (homogeneously p)
homogeneously = dimap unM1 M1 . homogeneously
instance Homogeneous f => Homogeneous (Rec1 f) where
homogeneously = dimap unRec1 Rec1 . homogeneously
instance Homogeneous Maybe where
homogeneously = optionalP
instance Homogeneous [] where
homogeneously = manyP
instance Homogeneous Vector where
homogeneously p = mapIso listEot (oneP >+< p >*< homogeneously p)
instance Homogeneous Seq where
homogeneously p = mapIso listEot (oneP >+< p >*< homogeneously p)
instance Homogeneous Complex where
homogeneously p = dimap2 realPart imagPart (:+) p p

-- Alternator/Filtrator --

Expand Down
Loading