cartesian-profunctors
Safe HaskellNone
LanguageHaskell2010

Data.Profunctor.FinFn

Synopsis

Documentation

data FinFn a b Source #

Instances

Instances details
Cartesian FinFn Source # 
Instance details

Defined in Data.Profunctor.FinFn

Methods

proUnit :: FinFn a () Source #

proProduct :: (a -> (a1, a2)) -> ((b1, b2) -> b) -> FinFn a1 b1 -> FinFn a2 b2 -> FinFn a b Source #

(***) :: FinFn a b -> FinFn a' b' -> FinFn (a, a') (b, b') Source #

(&&&) :: FinFn a b -> FinFn a b' -> FinFn a (b, b') Source #

proPower :: forall (n :: Nat) a b. KnownNat n => FinFn a b -> FinFn (Finite n -> a) (Finite n -> b) Source #

Cocartesian FinFn Source # 
Instance details

Defined in Data.Profunctor.FinFn

Methods

proEmpty :: FinFn Void b Source #

proSum :: (a -> Either a1 a2) -> (Either b1 b2 -> b) -> FinFn a1 b1 -> FinFn a2 b2 -> FinFn a b Source #

(+++) :: FinFn a b -> FinFn a' b' -> FinFn (Either a a') (Either b b') Source #

(|||) :: FinFn a b -> FinFn a' b -> FinFn (Either a a') b Source #

proTimes :: forall (n :: Nat) a b. KnownNat n => FinFn a b -> FinFn (Finite n, a) (Finite n, b) Source #

Profunctor FinFn Source # 
Instance details

Defined in Data.Profunctor.FinFn

Methods

dimap :: (a -> b) -> (c -> d) -> FinFn b c -> FinFn a d #

lmap :: (a -> b) -> FinFn b c -> FinFn a c #

rmap :: (b -> c) -> FinFn a b -> FinFn a c #

(#.) :: forall a b c q. Coercible c b => q b c -> FinFn a b -> FinFn a c #

(.#) :: forall a b c q. Coercible b a => FinFn b c -> q a b -> FinFn a c #

makeFinFn :: forall (n :: Nat) a b. KnownNat n => (a -> Finite n) -> (Finite n -> b) -> FinFn a b Source #

Safe construction

withFinFn :: FinFn a b -> (forall (n :: Nat). KnownNat n => (a -> Finite n) -> (Finite n -> b) -> r) -> r Source #

Safe pattern matching

applyFinFn :: FinFn a b -> a -> b Source #

How I would say... applyFinFn is nice, functor-ish. It commutes with Profunctor, Cartesian, Cocartesian, and composition (>>>>).

(>>>>) :: FinFn a b -> FinFn b c -> FinFn a c infixr 1 Source #

FinFn composes like Category, but can't be a Category since it does not have id.

(<<<<) :: FinFn b c -> FinFn a b -> FinFn a c infixr 1 Source #

(<<<<) = flip (>>>>)

fromMap :: Ord a => Map a b -> FinFn a (Maybe b) Source #

applyFinFn . fromMap = flip Map.lookup