Haskell Language
Monades communes comme monades gratuites
Recherche…
Vide libre ~~ Identité
Donné
data Empty a
nous avons
data Free Empty a
= Pure a
-- the Free constructor is impossible!
qui est isomorphe à
data Identity a
= Identity a
Identité Libre ~~ (Nat,) ~~ Écrivain Nat
Donné
data Identity a = Identity a
nous avons
data Free Identity a
= Pure a
| Free (Identity (Free Identity a))
qui est isomorphe à
data Deferred a
= Now a
| Later (Deferred a)
ou de manière équivalente (si vous promettez d’évaluer l’élément fst en premier) (Nat, a)
, alias Writer Nat a
, avec
data Nat = Z | S Nat
data Writer Nat a = Writer Nat a
Gratuit Peut-être ~~ MaybeT (écrivain Nat)
Donné
data Maybe a = Just a
| Nothing
nous avons
data Free Maybe a
= Pure a
| Free (Just (Free Maybe a))
| Free Nothing
ce qui équivaut à
data Hopes a
= Confirmed a
| Possible (Hopes a)
| Failed
ou de manière équivalente (si vous vous engagez à évaluer l'élément fst en premier) (Nat, Maybe a)
, alias MaybeT (Writer Nat) a
with
data Nat = Z | S Nat
data Writer Nat a = Writer Nat a
data MaybeT (Writer Nat) a = MaybeT (Nat, Maybe a)
Free (Writer w) ~~ Writer [w]
Donné
data Writer w a = Writer w a
nous avons
data Free (Writer w) a
= Pure a
| Free (Writer w (Free (Writer w) a))
qui est isomorphe à
data ProgLog w a
= Done a
| After w (ProgLog w a)
ou, de manière équivalente (si vous vous engagez à évaluer le journal en premier), Writer [w] a
.
Gratuit (Const c) ~~ Soit c
Donné
data Const c a = Const c
nous avons
data Free (Const c) a
= Pure a
| Free (Const c)
qui est isomorphe à
data Either c a
= Right a
| Left c
Gratuit (Reader x) ~~ Reader (Stream x)
Donné
data Reader x a = Reader (x -> a)
nous avons
data Free (Reader x) a
= Pure a
| Free (x -> Free (Reader x) a)
qui est isomorphe à
data Demand x a
= Satisfied a
| Hungry (x -> Demand x a)
ou équivalent Stream x -> a
avec
data Stream x = Stream x (Stream x)
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow