/caterwaul/Optional/functor/endo/star

Copy path to clipboard

Source

let P =
https://prelude.dhall-lang.org/v20.1.0/package.dhall sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98

let kCat = ../../../Category/Cat/semigroupal

let monoidal = ../../../Category/Monoidal/Cartesian/extractMonoidal kCat

let base = ../../../Category/Monoidal/extractCategory kCat

let vObject = Type

let v =
base
Type
vObject
(monoidal Type vObject ../../../Category/Set/monoidal/cartesian)

let object = Type

let cat = monoidal vObject object ../../../Category/Set/monoidal/cartesian

in λ(m : kCat.arrow object object) →
λ(monoidal : ../../../Functor/Monoidal/Type object v cat cat m) →
{ map =
λ(a : object) →
λ(b : object) →
λ(f : cat.arrow { _1 = a, _2 = m b }) →
λ(fa : Optional a) →
P.Optional.fold
a
fa
(m (Optional b))
( λ(x : a) →
( ../../../Functor/Monoidal/extractFunctor
Type
v
cat
cat
m
monoidal
).map
b
(Optional b)
(λ(y : b) → Some y)
(f x)
)
(monoidal.unit (Optional b) (λ(_ : cat.unit) → None b))
}
: ../../../Functor/Endo/Star/Type
vObject
object
v
(base vObject object cat)
m
Optional