Haskell Language
コフレのコモナスの基礎となる共通のファンクター
サーチ…
無条件空白~~空
与えられた
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