모나드 인스턴스를 이해하는 불쌍한 동시성?

바브라 커닝햄

나는 통해 실행하고있어 동시성을 구현하는 가이드와 나는 문제가이 모나드 인스턴스를 이해하는 데 문제가 있습니다 :

data Action m = Atom (m (Action m)) | Fork (Action m) (Action m) | Stop

newtype C m a = C {apply :: (a -> Action m) -> Action m}

instance Monad (C m ) where
 m >>= f         = C $ \k -> apply m(\a -> apply (f a) k) --?
 return x        = C $ \k -> k x

연속 모나드의 기본적인 사용을 이해하지만이 선언에서 무슨 일이 일어나고 있는지 해독하는 데 어려움을 겪고 있습니까?

KA Buhr

a C m a연속 전달 스타일 Action ma표현 된 추상 유형에 대한 계산 일 뿐이 (a -> Action m) -> Action m므로 데이터 생성자 C와 해당 레코드 선택기 apply는 구문 론적 플러 프일뿐입니다. 그것들없이 그리고 명시적인 모나드 인스턴스없이 재 작성하면 다음과 같은 동등한 코드를 얻게됩니다. ( Cnt여기에 있는 유형 연속 모나드 아니라 연속 일뿐 입니다. 연속 모나드 Control.Monad.Trans.Cont는 내 CPS유형 과 더 비슷 합니다.)

type Cnt m a = (a -> Action m)   -- a continuation, not a Cont monad
type CPS m a = Cnt m a -> Action m
bind :: CPS m a -> (a -> CPS m b) -> CPS m b
cps_a `bind` a_to_cps_b = \cont_b -> cps_a (\a -> a_to_cps_b a cont_b)

또는 약간 더 자세한 정보 :

cps_a `bind` a_to_cps_b =
  \cont_b -> cps_a (\a -> let cps_b = a_to_cps_b a in cps_b cont_b)

어떻게 작동합니까? 글쎄요, 괄호 안의 부분 cont_bb-continuation 인 자유 변수 가지고 있습니다. 그러나이 continuation이 주어지면 free continuation에 적용되는 -computation (CPS 스타일) 을 구성하는 a데 사용 되는 -continuation 일뿐입니다 . 간단히 말해서, 괄호 안의 부분 은- 연속으로 감싸 진 제공된 부분입니다 . 와 결합하기 위해 , 우리는 단지 적용 이에 -continuation, 그것은의 조합 대표 에 의해 표현 -computation 지도에 낳는 것을 -computation는 모두 무료 변수 CPS 표현을 . 이 자유 변수를 추상화하면a_to_cps_bbcont_ba_to_cps_bacps_acps_aaacps_aa_to_cps_bbb_contCPS m b 우리가 필요합니다.

내가 생각하는 그 힘의 도움 이해하기가 모든 것을 쉽게, 당신은 지금이 인식, 원래의 정의로 돌아갈 수 있습니다 \a -> apply (f a) k정말이다 a의 -continuation 버전 f :: a -> C m b무료 변수로 표현 k나타내는 b-continuation합니다. apply m적용 할 수 있습니다 a-computation을 m이에 a-continuation, 우리는 수확기가 뭔가 남아있는 a-computation m지도와 f에서 aA와 b, 모든 자유의 표현 -computation b-continuation라는 k, 람다하는 우리가 할 수있는 b-abstract는 bind 연산자가 반환해야하는- 필요한 계산 을 구성합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 인수가 동일한 유형을 갖는 쌍에 대한 모나드 인스턴스를 작성하는 방법은 무엇입니까?

분류에서Dev

다른 모델의 인스턴스가 생성되는 즉시 한 모델의 인스턴스를 생성하려면 어떻게해야합니까?

분류에서Dev

동종 쌍의 모나드 인스턴스에 대해 알려진 / 안정된 사용 사례

분류에서Dev

연결 가능한 개체의 인스턴스 속성 또는 필드를 수집하는 동안 가비지 수집기의 불명확 한 동작

분류에서Dev

객체 지향 메서드를 사용하여 동일한 클래스의 인스턴스에 대한 파이썬 동시성

분류에서Dev

모듈 인스턴스화를 위해 하나 이상의 출력 버스 핀을 무시하는 방법

분류에서Dev

API를 통해 VM 인스턴스를 생성하기 위해 사용 가능한 모든 이미지에 대한 정보를 얻는 방법

분류에서Dev

인스턴스 변수에 대한 코드를 작성하는 방법에 대해 혼란 스러움

분류에서Dev

동일한 모나드에 작업이있는 모나드로 생성 된 ConduitT에 대해 시퀀스와 결합을 결합 할 수 있습니까?

분류에서Dev

여러 이벤트에 동일한 EventArgs 인스턴스를 사용하면이 코드가 냄새가나요?

분류에서Dev

파이썬에서 다른 인스턴스의 메서드를 사용하여 한 인스턴스의 속성을 변경하는 방법

분류에서Dev

모든 매핑에 대해 동일한 IdentifierGenerator 인스턴스를 사용하는 방법

분류에서Dev

requirejs를 사용하여 인스턴스화 한 후 지시문을 모듈에로드하는 방법

분류에서Dev

한 번에 하나의 리소스 인스턴스를 생성하도록 서블릿 컨테이너에 지시하는 방법이 있습니까?

분류에서Dev

파이 게임에서 동일한 속성으로 많은 인스턴스를 만드는 방법

분류에서Dev

코스 트럭 터를 통해 인스턴스를 생성하는 노드

분류에서Dev

모델 인스턴스를 만드는 동안 django의 TypeError

분류에서Dev

모델 onClick의 인스턴스를 생성하기위한 Ajax 호출 (Rails 4)

분류에서Dev

jQuery 선택기는 이벤트를 시작한 인스턴스뿐만 아니라 모든 인스턴스를 전달합니다.

분류에서Dev

AngularJS-모든 지시문 인스턴스에 대해 동일한 타이머

분류에서Dev

커스텀 모나드를위한 MonadTransControl 인스턴스

분류에서Dev

동일한 활동 내에서보기 모델의 다른 인스턴스를 만드는 Hilt

분류에서Dev

동일한 브로드 캐스트의 두 개 이상의 인스턴스를 동시에 실행하는 방법

분류에서Dev

동일한 이름의 모든 인스턴스 메서드를 호출하는 정적 메서드에 대한 이름 / 용어가 있습니까?

분류에서Dev

큰 파이썬 클래스에서 코드를 구성하기 위해 인스턴스 메서드를 사용하는 것이 나쁜가요?

분류에서Dev

Selenium Java- 한 번 로그인하고 동일한 브라우저 인스턴스를 사용하여 여러 테스트 케이스를 실행하는 방법 대신 모든 단일 테스트에 대해 브라우저를 열거 나 닫습니다.

분류에서Dev

동일한 ViewModel 클래스를 사용하는 2 개의 XAML, 그러나 2 개의 개별 인스턴스

분류에서Dev

백그라운드 작업에서 IHttpContextAccessor 인스턴스 (또는 이와 동등한 인스턴스)를 얻는 방법은 무엇입니까?

분류에서Dev

인스턴스를 전달하지 않고 p5.js 인스턴스 모드의 종속성

Related 관련 기사

  1. 1

    두 인수가 동일한 유형을 갖는 쌍에 대한 모나드 인스턴스를 작성하는 방법은 무엇입니까?

  2. 2

    다른 모델의 인스턴스가 생성되는 즉시 한 모델의 인스턴스를 생성하려면 어떻게해야합니까?

  3. 3

    동종 쌍의 모나드 인스턴스에 대해 알려진 / 안정된 사용 사례

  4. 4

    연결 가능한 개체의 인스턴스 속성 또는 필드를 수집하는 동안 가비지 수집기의 불명확 한 동작

  5. 5

    객체 지향 메서드를 사용하여 동일한 클래스의 인스턴스에 대한 파이썬 동시성

  6. 6

    모듈 인스턴스화를 위해 하나 이상의 출력 버스 핀을 무시하는 방법

  7. 7

    API를 통해 VM 인스턴스를 생성하기 위해 사용 가능한 모든 이미지에 대한 정보를 얻는 방법

  8. 8

    인스턴스 변수에 대한 코드를 작성하는 방법에 대해 혼란 스러움

  9. 9

    동일한 모나드에 작업이있는 모나드로 생성 된 ConduitT에 대해 시퀀스와 결합을 결합 할 수 있습니까?

  10. 10

    여러 이벤트에 동일한 EventArgs 인스턴스를 사용하면이 코드가 냄새가나요?

  11. 11

    파이썬에서 다른 인스턴스의 메서드를 사용하여 한 인스턴스의 속성을 변경하는 방법

  12. 12

    모든 매핑에 대해 동일한 IdentifierGenerator 인스턴스를 사용하는 방법

  13. 13

    requirejs를 사용하여 인스턴스화 한 후 지시문을 모듈에로드하는 방법

  14. 14

    한 번에 하나의 리소스 인스턴스를 생성하도록 서블릿 컨테이너에 지시하는 방법이 있습니까?

  15. 15

    파이 게임에서 동일한 속성으로 많은 인스턴스를 만드는 방법

  16. 16

    코스 트럭 터를 통해 인스턴스를 생성하는 노드

  17. 17

    모델 인스턴스를 만드는 동안 django의 TypeError

  18. 18

    모델 onClick의 인스턴스를 생성하기위한 Ajax 호출 (Rails 4)

  19. 19

    jQuery 선택기는 이벤트를 시작한 인스턴스뿐만 아니라 모든 인스턴스를 전달합니다.

  20. 20

    AngularJS-모든 지시문 인스턴스에 대해 동일한 타이머

  21. 21

    커스텀 모나드를위한 MonadTransControl 인스턴스

  22. 22

    동일한 활동 내에서보기 모델의 다른 인스턴스를 만드는 Hilt

  23. 23

    동일한 브로드 캐스트의 두 개 이상의 인스턴스를 동시에 실행하는 방법

  24. 24

    동일한 이름의 모든 인스턴스 메서드를 호출하는 정적 메서드에 대한 이름 / 용어가 있습니까?

  25. 25

    큰 파이썬 클래스에서 코드를 구성하기 위해 인스턴스 메서드를 사용하는 것이 나쁜가요?

  26. 26

    Selenium Java- 한 번 로그인하고 동일한 브라우저 인스턴스를 사용하여 여러 테스트 케이스를 실행하는 방법 대신 모든 단일 테스트에 대해 브라우저를 열거 나 닫습니다.

  27. 27

    동일한 ViewModel 클래스를 사용하는 2 개의 XAML, 그러나 2 개의 개별 인스턴스

  28. 28

    백그라운드 작업에서 IHttpContextAccessor 인스턴스 (또는 이와 동등한 인스턴스)를 얻는 방법은 무엇입니까?

  29. 29

    인스턴스를 전달하지 않고 p5.js 인스턴스 모드의 종속성

뜨겁다태그

보관