サーチ…


無条件空白~~空

与えられた

data Empty a

我々は持っています

data Cofree Empty a
   --  = a :< ...  not possible!

Cofree(Const c)〜ライターc

与えられた

data Const c a = Const c

我々は持っています

data Cofree (Const c) a
     = a :< Const c

それは同型である

data Writer c a = Writer c a

同性愛者のアイデンティティ~~ストリーム

与えられた

data Identity a = Identity a

我々は持っています

data Cofree Identity a
     = a :< Identity (Cofree Identity a)

それは同型である

data Stream a = Stream a (Stream a)

Cofree Maybe ~~ NonEmpty

与えられた

data Maybe a = Just a
             | Nothing

我々は持っています

data Cofree Maybe a
     = a :< Just (Cofree Maybe a)
     | a :< Nothing

それは同型である

data NonEmpty a
     = NECons a (NonEmpty a)
     | NESingle a

Cofree(Writer w)〜WriterT wストリーム

与えられた

data Writer w a = Writer w a

我々は持っています

data Cofree (Writer w) a
     = a :< (w, Cofree (Writer w) a)

これは

data Stream (w,a)
     = Stream (w,a) (Stream (w,a))

WriterT w Streamとして適切に記述することができます。

data WriterT w m a = WriterT (m (w,a))

Cofree(どちらかe)~~ NonEmptyT(作者e)

与えられた

data Either e a = Left e
                | Right a

我々は持っています

data Cofree (Either e) a
     = a :< Left e
     | a :< Right (Cofree (Either e) a)

それは同型である

data Hospitable e a
     = Sorry_AllIHaveIsThis_Here'sWhy a e
     | EatThis a (Hospitable e a)

または、完全な結果の後にログを評価することを約束した場合、 NonEmptyT (Writer e) a

data NonEmptyT (Writer e) a = NonEmptyT (e,a,[a])

Cofree(Reader x)〜ムーアx

与えられた

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

我々は持っています

data Cofree (Reader x) a
     = a :< (x -> Cofree (Reader x) a)

それは同型である

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

別名ムーアマシン



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow