Tutoriel par Examples: cofree



Donné data Empty a nous avons data Cofree Empty a -- = a :< ... not possible!
Donné data Const c a = Const c nous avons data Cofree (Const c) a = a :< Const c qui est isomorphe à data Writer c a = Writer c a
Donné data Identity a = Identity a nous avons data Cofree Identity a = a :< Identity (Cofree Identity a) qui est isomorphe à data Stream a = Stream a (Stream a)
Donné data Maybe a = Just a | Nothing nous avons data Cofree Maybe a = a :< Just (Cofree Maybe a) | a :< Nothing qui est isomorphe à data NonEmpty a = NECons a (NonEmpty a) | NESingle a
Donné data Writer w a = Writer w a nous avons data Cofree (Writer w) a = a :< (w, Cofree (Writer w) a) ce qui équivaut à data Stream (w,a) = Stream (w,a) (Stream (w,a)) qui peut correctement être écrit comme WriterT w Stream avec data WriterT w m a = WriterT (m (w,a))
Donné data Either e a = Left e | Right a nous avons data Cofree (Either e) a = a :< Left e | a :< Right (Cofree (Either e) a) qui est isomorphe à data Hospitable e a = Sorry_AllIHaveIsThis_Here'sWhy a e | EatThis a (Hospitable e a) ou, si vous vo...
Donné data Reader x a = Reader (x -> a) nous avons data Cofree (Reader x) a = a :< (x -> Cofree (Reader x) a) qui est isomorphe à data Plant x a = Plant a (x -> Plant x a) aka machine Moore .

Page 1 de 1