Haskell Language
cofree comonads의 기본으로 일반적인 펑터
수색…
무분별한 공백 ~~ 비어 있음
주어진
data Empty a
우리는 가지고있다.
data Cofree Empty a
-- = a :< ... not possible!
Cofree (Const c) ~ Writer 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 (작가 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 (Either e) ~~ NonEmptyT (Writer 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