Поиск…


Бесплатная пустая ~~ Identity

Дано

data Empty a

у нас есть

data Free Empty a
     = Pure a
-- the Free constructor is impossible!

которая изоморфна

data Identity a
     = Identity a

Free Identity ~~ (Nat,) ~~ Writer Nat

Дано

data Identity a = Identity a

у нас есть

data Free Identity a
     = Pure a
     | Free (Identity (Free Identity a))

которая изоморфна

data Deferred a
     = Now a
     | Later (Deferred a)

или эквивалентно (если вы обещаете сначала оценить первый элемент) (Nat, a) , aka Writer Nat a , с

data Nat = Z | S Nat
data Writer Nat a = Writer Nat a

Бесплатно Может быть ~~ MaybeT (Writer Nat)

Дано

data Maybe a = Just a
             | Nothing

у нас есть

data Free Maybe a
     = Pure a
     | Free (Just (Free Maybe a))
     | Free Nothing

что эквивалентно

data Hopes a
     = Confirmed a
     | Possible (Hopes a)
     | Failed

или эквивалентно (если вы обещаете сначала оценить первый элемент) (Nat, Maybe a) , aka MaybeT (Writer Nat) a с

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]

Дано

data Writer w a = Writer w a

у нас есть

data Free (Writer w) a
     = Pure a
     | Free (Writer w (Free (Writer w) a))

которая изоморфна

data ProgLog w a
     = Done a
     | After w (ProgLog w a)

или, что то же самое, (если вы обещаете сначала оценить журнал), Writer [w] a .

Free (Const c) ~~ Либо c

Дано

data Const c a = Const c

у нас есть

data Free (Const c) a
     = Pure a
     | Free (Const c)

которая изоморфна

data Either c a
     = Right a
     | Left c

Free (Reader x) ~~ Reader (поток x)

Дано

data Reader x a = Reader (x -> a)

у нас есть

data Free (Reader x) a
     = Pure a
     | Free (x -> Free (Reader x) a)

которая изоморфна

data Demand x a
     = Satisfied a
     | Hungry (x -> Demand x a)

или эквивалентно Stream x -> a с

data Stream x = Stream x (Stream x)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow