IT

지퍼가 왜 코 모나드인지 이해

lottoking 2020. 7. 28. 07:42
반응형

지퍼가 왜 코 모나드인지 이해


이전 질문에 대한 답변대한 후속 조치 입니다.

각 항목의 a:A함수 로 매핑 하고 생성 List[A]가정해야 우리한다고 가정하십시오 .b:Bdef f(a:A, leftNeighbors:List[A]): BList[B]

나는 분명히 map목록을 호출 할 수는 없지만 목록 지퍼를 사용할 수 있습니다 . 지퍼는 목록을 이동하는 커서입니다. 현재 요소 ( focus) 및 제공 요소에 대한 액세스를 제공합니다 .

지금은 내를 대체 할 수 fdef f'(z:Zipper[A]):B = f(z.focus, z.left)함께이 새로운 기능을 f'cobind의 방법 Zipper[A].

cobind다음과 같이 작동이 있음을 호출 f'지퍼로, 다음 지퍼를 이동 전화 f'새가 "이동"지퍼, 다시 등등, 그래서 지퍼를 이동 ... 지퍼가 목록에 도달 할 때까지 할 수 있습니다.

마지막으로, cobind유형의 새 지퍼를 반환 Zipper[B]하여 목록으로 변환 할 수 있으므로 문제가 해결됩니다.

이제 cobind[A](f:Zipper[A] => B):Zipper[B]와 사이 의 대칭에 주목하십시오. bind[A](f:A => List[B]):List[B]이것이 Lista MonadZippera Comonad입니다.

말이하세요?


이 질문이 "답변이없는"라는 질문이 "답변이없는"라고 대답했습니다. 1 년 전부터 훨씬 더 건설적인 내용은 없었습니다.

A List는 여러 방법으로 Zipper코 모나드로 볼 수있는 반면 모나드 (다양한 방법으로)로 캐스팅 할 수 있습니다. 차이점은 개념적으로 상태 머신 ( Monad인터페이스에 관한 것)에 데이터를 건설적으로 "추가" 하거나 "해체 적으로"상태에서 " 추출 "하는 것 (즉, Comonad수행하는 것)에 있습니다.

그러나 "이 이해가 의미가 있는가"라고 대답하기 쉬운 질문에 대답합니다. 어떤 의미에서는 의미가 없습니다.

참고 URL : https://stackoverflow.com/questions/24013339/understanding-why-zipper-is-a-comonad

반응형