Haskell의 Comonad typeclass는 무엇입니까?


105

Haskell의 Comonad typeclass는 무엇입니까? 에서 Comonad에서와 같이 comonad 패키지 Control.Comonad (A Comonad의 typeclass는 또한 제공하는 다른 패키지의 설명은 환영합니다). 나는 Comonad에 대해 막연하게 들었지만, 내가 그것에 대해 정말로 아는 extract :: w a -> a것은 Monad의 return :: a -> m a.

"실제"코드에서 Comonad의 "실제"사용에 대한 보너스 포인트.


“co”와 노멀의 차이점이 무엇인지 정말로보고 싶습니다. 나는 모나드가 무엇인지 압니다. 그래서“co”가 무엇을 의미하는지 안다면, comonad가 무엇인지 스스로 결론을 내리고 그것을 깊이 이해할 수 있습니다. Alexey Romanov의 대답은 그 측면에서 아무것도하지 않았습니다.
Evi1M4chine

2
@ Evi1M4chine : "co"(느슨하게)는 "화살표 뒤집기"를 의미합니다. 여기에 대한 대략적인 시각이 있습니다. 모나드 연산을 고려하십시오 : return :: a ~> m a, flip bind :: (a ~> m b) -> (m a ~> m b). 구불 구불 화살표를 역방향 당신은 comonadic 작업을 얻을 : extract :: a <~ w a, extend :: (a <~ w b) -> (w a <~ w b)( extract :: w a -> a, extend :: (w a -> b) -> w a -> w b)
댄 버튼

@Dan Burton에게 감사합니다. 모나드를 사용하는 동안에는 "내부"(새롭고 변경된 것을 넣는 것)에서 작업하고 코 모나드를 사용하여 "외부"에서 작업합니다 (마지막으로 꺼내거나 변경하기 위해). . 그 견해가 맞습니까? 깊은 이해에 확실히 도움이되기 때문입니다.
Evi1M4chine

코 모나드는 공동 효과를 모델링하는 데 사용할 수 있습니다. 여기 coeffects에 큰 소개합니다 : tomasp.net/coeffects
zeronone은

답변:


83

다음 링크가 도움이 될 수 있습니다.

  1. 세포 오토마타를 평가하는 것은 혼수 상태 입니다. 특히 "많은 작지만 유사한 계산에서 큰 데이터 구조가 결합 된 것을 볼 때마다 우리가 코 모나드를 다룰 가능성이 큽니다".
  2. 시퀀스, 스트림 및 세그먼트
  3. 일상 생활의 코 모나드

1
+1 첫 번째 링크는 저를 위해 정말 하나로 모인 링크였습니다.
luqui 2011

42
링크 전용 답변에는 최소한 링크 된 내용의 요약이 포함되어야합니다. 현재이 답변은 좋은 답변에 적합하지 않습니다. 링크 된 기사없이 자체적으로 설 수 있도록 약간 확장하는 것을 고려하십시오.
Bakuriu

3
"작지만 유사한 많은 계산에서 큰 데이터 구조가 합쳐진 것을 볼 때마다 우리가 코 모나드를 다룰 가능성이 큽니다." .... 그렇다면 프래그먼트 셰이더가 코모 나딕이라는 의미입니까?
Sam Kellett 2015 년

나는 발견 이 예 의를 extend도움이 될 수 있습니다.
Chris Penner

22

이것은 내 질문에 완전히 대답하지는 않지만 몇 가지 관련 정보를 대답 형식에 넣고 싶었습니다.

"co"(느슨하게)는 "화살표 뒤집기"를 의미합니다. 여기에 대한 대략적인 시각이 있습니다.

모나드 연산을 고려하십시오.

return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)

구불 구불 한 화살표를 반대로하면 코모 나딕 연산이 나타납니다.

extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)

(일반 화살표로 작성)

extract :: w a -> a
extend :: (w a -> b) -> w a -> w b

공지 사항이 형식, 방법 return너무의 인수 슬롯에 맞게 일이 화살표이고 flip (>>=), 동일한은 사실이다 extract하고 extend. 모나드는 / comonad 법은 둘 때 말 return또는 extract해당 슬롯에, 결과는 신원 화살표입니다. 법칙은 "화살표를 뒤집은 상태에서"동일합니다. 그것은 매우 손쉬운 대답이지만 약간의 통찰력을 제공하기를 바랍니다.


2
당신의 대답은 모나드 튜토리얼 오류를 피하는 것과 잘 어울립니다. 모나드 (및 코 모나드)는 단순한 인터페이스입니다. 그것이 어떻게 의도 되었는지 아는 것은 참으로 좋을 입니다. 에서와 같이 : 그들 뒤에 아이디어.
Evi1M4chine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.