cat/comonad
Comonad type {minimal implementations - extract and duplicate/extend}
Types
Comonad type.
class Functor w => Comonad w where
extract :: w a -> a
duplicate :: w a -> w (w a)
extend :: (w a -> b) -> w a -> w b
From this type you can construct a Functor instance containing a useful map function. Also, extend and duplicate can be expressed in terms of each other:
extend f = fmap f . duplicate
duplicate = extend id
fmap f = extend (f . extract)
pub type Comonad(w, a, b, wa, wb, wwa) {
Comonad(
extract: fn(wa) -> a,
duplicate: fn(wa) -> wwa,
extend: fn(wa, fn(wa) -> b) -> wb,
)
}
Constructors
-
Comonad( extract: fn(wa) -> a, duplicate: fn(wa) -> wwa, extend: fn(wa, fn(wa) -> b) -> wb, )
Values
pub fn to_functor(
w: Comonad(f, a, b, wa, wb, wwa),
) -> functor.Functor(f, a, b, wa, wb)