연속은 모나드입니까?
-
21-08-2019 - |
문제
연속이 모나드라고 할 수 있습니까? 그들은 모나드의 하위 집합입니까, 아니면 단순히 모나드를 구현하는 방법입니까?
편집하다: 아니면 내가 틀렸을 수도 있습니다 모나드 보다 추상적 인 개념입니다 연속? (그래서 나는 정말로 사과를 여기 오렌지와 비교하고 있습니다)
해결책
간단히 말해서, 모나드의 '바인딩'은 인수로 효과적인 연속 ( '나머지 계산'의 람다)을 취하기 때문에 모나드는 그런 의미에서 연속성입니다. 반면, 아래 다수의 기타 링크에서 제안한 바와 같이 Monadic Syntax Sugars를 사용하여 CPS 언어로 연속 패스 스타일을 효과적으로 구현할 수 있습니다.
Haskell의 'All About Monads'튜토리얼에서 :
https://www.haskell.org/haskellwiki/all_about_monads#the_continuation_monad
F# Continuation Monad, 스타일 루프를 위해 '브레이크'및 '계속'을 구현하는 데 사용됩니다.
http://cs.hubfs.net/forums/thread/9311.aspx
그리고 F#의 문제에 연속 모나드를 적용하는 예 :
http://lorgonblog.spaces.live.com/blog/cns !701679ad17b6d310 !256.entry
다른 팁
연속성 모나드 일뿐 만 아니라 연속과 상태가 있다면 기능적인 모나드를 시뮬레이션 할 수 있다는 점에서 일종의 보편적 인 모나드입니다. 이 인상적이고 고도로 기술적 인 결과는 인상적이고 고도로 기술적 인 마음에서 비롯됩니다. Andrzej Filinski, 1994 년에 글을 썼거나 그에 따라 :
우리는 단위 및 확장 작업이 순수한 기능 용어로 표현되는 모나드가 "복합 가능한 연속"을 가진 콜 별 언어에 포함시킬 수 있음을 보여줍니다.
그 주제에 대한 아주 좋은 기사 :http://blog.sigfpe.com/2008/12/mother-of-all-monads.html
연속은 프로그램의 특정 기능입니다. 모나드는 유형 생성자입니다.
유형 생성자 Cont<T>
연속 처리 유형 T
모나드가 아닐 것입니다.
하지만, Cont<Cont<T>>
모나드이며, 이것은 일반적으로 "연속 모나드"라고 불립니다.
(언어로 Callcc를 갖는 것은 Cont<Cont<T>>
에게 T
.)