수색…


무분별한 공백 ~~ 비어 있음

주어진

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