Haskell Language
Gemeinsame Funktoren als Basis für Cofree-Comonaden
Suche…
Cofree leer ~~ leer
Gegeben
data Empty a
wir haben
data Cofree Empty a
-- = a :< ... not possible!
Cofree (Const c) ~~ Schriftsteller c
Gegeben
data Const c a = Const c
wir haben
data Cofree (Const c) a
= a :< Const c
was isomorph zu ist
data Writer c a = Writer c a
Cofree Identity ~~ Stream
Gegeben
data Identity a = Identity a
wir haben
data Cofree Identity a
= a :< Identity (Cofree Identity a)
was isomorph zu ist
data Stream a = Stream a (Stream a)
Cofree Vielleicht ~~ NonEmpty
Gegeben
data Maybe a = Just a
| Nothing
wir haben
data Cofree Maybe a
= a :< Just (Cofree Maybe a)
| a :< Nothing
was isomorph zu ist
data NonEmpty a
= NECons a (NonEmpty a)
| NESingle a
Cofree (Writer w) ~~ WriterT w Stream
Gegeben
data Writer w a = Writer w a
wir haben
data Cofree (Writer w) a
= a :< (w, Cofree (Writer w) a)
das ist äquivalent zu
data Stream (w,a)
= Stream (w,a) (Stream (w,a))
was richtig als WriterT w Stream
mit geschrieben werden kann
data WriterT w m a = WriterT (m (w,a))
Cofree (entweder e) ~~ NonEmptyT (Writer e)
Gegeben
data Either e a = Left e
| Right a
wir haben
data Cofree (Either e) a
= a :< Left e
| a :< Right (Cofree (Either e) a)
was isomorph zu ist
data Hospitable e a
= Sorry_AllIHaveIsThis_Here'sWhy a e
| EatThis a (Hospitable e a)
oder, wenn Sie versprechen, das Protokoll nur nach dem vollständigen Ergebnis NonEmptyT (Writer e) a
, können Sie NonEmptyT (Writer e) a
mit
data NonEmptyT (Writer e) a = NonEmptyT (e,a,[a])
Cofree (Reader x) ~~ Moore x
Gegeben
data Reader x a = Reader (x -> a)
wir haben
data Cofree (Reader x) a
= a :< (x -> Cofree (Reader x) a)
was isomorph zu ist
data Plant x a
= Plant a (x -> Plant x a)
auch bekannt als Moore Machine .
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow