Haskell Language
Gemeenschappelijke monaden als vrije monaden
Zoeken…
Gratis leeg ~~ Identity
Gegeven
data Empty a
wij hebben
data Free Empty a
= Pure a
-- the Free constructor is impossible!
wat isomorf is voor
data Identity a
= Identity a
Gratis identiteit ~~ (Nat,) ~~ Writer Nat
Gegeven
data Identity a = Identity a
wij hebben
data Free Identity a
= Pure a
| Free (Identity (Free Identity a))
wat isomorf is voor
data Deferred a
= Now a
| Later (Deferred a)
of gelijkwaardig (als u belooft het eerste element eerst te evalueren) (Nat, a)
, aka Writer Nat a
, met
data Nat = Z | S Nat
data Writer Nat a = Writer Nat a
Gratis Misschien ~~ MaybeT (Writer Nat)
Gegeven
data Maybe a = Just a
| Nothing
wij hebben
data Free Maybe a
= Pure a
| Free (Just (Free Maybe a))
| Free Nothing
wat gelijk is aan
data Hopes a
= Confirmed a
| Possible (Hopes a)
| Failed
of gelijkwaardig (als je belooft het eerste element eerst te evalueren) (Nat, Maybe a)
, aka MaybeT (Writer Nat) a
met
data Nat = Z | S Nat
data Writer Nat a = Writer Nat a
data MaybeT (Writer Nat) a = MaybeT (Nat, Maybe a)
Gratis (Writer w) ~~ Writer [w]
Gegeven
data Writer w a = Writer w a
wij hebben
data Free (Writer w) a
= Pure a
| Free (Writer w (Free (Writer w) a))
wat isomorf is voor
data ProgLog w a
= Done a
| After w (ProgLog w a)
of, als u belooft het logboek eerst te evalueren), Writer [w] a
.
Gratis (Const c) ~~ Ofwel c
Gegeven
data Const c a = Const c
wij hebben
data Free (Const c) a
= Pure a
| Free (Const c)
wat isomorf is voor
data Either c a
= Right a
| Left c
Gratis (Reader x) ~~ Reader (Stream x)
Gegeven
data Reader x a = Reader (x -> a)
wij hebben
data Free (Reader x) a
= Pure a
| Free (x -> Free (Reader x) a)
wat isomorf is voor
data Demand x a
= Satisfied a
| Hungry (x -> Demand x a)
of equivalent Stream x -> a
met
data Stream x = Stream x (Stream x)
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow