data-diverse-lens-2.0.0.1: Isos & Lens for Data.Diverse.Many and Prisms for Data.Diverse.Which

Safe HaskellNone
LanguageHaskell2010

Data.Diverse.Profunctor.Many

Contents

Synopsis

Combinators similar to Profunctor Strong

type Itemized w a b s t = (Profunctor w, Strong w, HasItem a b s t, HasItem' a s) Source #

A friendlier constraint synonym for itemized.

itemized :: forall w a b s t. Itemized w a b s t => w a b -> w s t Source #

Like Strong or Arrow but lifting into Many

itemized' :: Profunctor w => w a b -> w (Many '[a]) (Many '[b]) Source #

Like Strong or Arrow but lifting into Many of one type

type Projected w a1 a2 b1 b2 = (Profunctor w, Strong w, Select a1 a2, Amend a1 b1 a2, b2 ~ Replaces a1 b1 a2) Source #

A friendlier constraint synonym for projected.

projected :: forall proxy w a1 a2 b1 b2. Projected w a1 a2 b1 b2 => proxy a2 -> w (Many a1) (Many b1) -> w (Many a2) (Many b2) Source #

Like Strong or Arrow but lifting from a Many to a Many of another type

type SelectWith w a1 a2 a3 b1 b2 b3 = (Category w, Profunctor w, Strong w, Select a1 (AppendUnique a1 a2), Select a2 (AppendUnique a1 a2), a3 ~ AppendUnique a1 a2, b3 ~ Append b1 b2) Source #

A friendlier constraint synonym for *&&*.

(*&&*) :: forall w a1 a2 a3 b1 b2 b3. SelectWith w a1 a2 a3 b1 b2 b3 => w (Many a1) (Many b1) -> w (Many a2) (Many b2) -> w (Many a3) (Many b3) infixr 3 Source #

Split the input between the two argument arrows and combine their output. The type of the resultant input is a Many of all the unique types in the argument arrows' inputs, The type of the resultant output is a concatenated Many of the arguments arrows' outputs. Analogous to a Many combination of both of *** and &&&. It is a compile error if the types are not distinct in each of the argument arrow inputs.

type ThenSelect w a2 b1 b2 b3 = (Category w, Profunctor w, Strong w, Select (Complement b1 a2) b1, Select a2 b1, b3 ~ Append (Complement b1 a2) b2) Source #

A friendlier constraint synonym for >&&>.

(>&&>) :: forall w a a2 b1 b2 b3. ThenSelect w a2 b1 b2 b3 => w a (Many b1) -> w (Many a2) (Many b2) -> w a (Many b3) infixr 3 Source #

Left-to-right chaining of arrows one after another, where left over input not consumed by the right arrow is forwarded to the output. It is a compile error if the types are not distinct in each of the argument arrow inputs, or if the input of the second arrow is not a subset of the output of the first arrow.

(<&&<) :: ThenSelect w a2 b1 b2 b3 => w (Many a2) (Many b2) -> w a (Many b1) -> w a (Many b3) infixl 2 Source #

right-to-left version of '(>&&>)'