2
나는 Prompt
의 정의를 통해 작업 중이며 Bind
인스턴스는 here으로 설명되어 있으며 Purescript에서 어떻게 보이는지 알아 내려고했습니다.Pseudcript의 프롬프트 Monad
실존 유형에 Purescript.Exists
을 사용하고 있습니다. 내 (고화질)은 다음과 같습니다 runExists
작업 할 때
Bind
인스턴스에서
Ask
케이스를 쓰기에 부착하고
data PromptAskF p r a
= PromptAskF (p a) (a -> Prompt p r)
type PromptAsk p r = Exists (PromptAskF p r)
data Prompt p r
= Ask (PromptAsk p r)
| Answer r
instance bindPrompt :: Bind (Prompt p) where
bind (Answer x) k = k x
bind (Ask ask) k = ???
, 나는 유형에 대한 매우 혼란 스러워요.
이 인스턴스는 어떻게 작성해야합니까?
감사합니다, 트릭을해야이 같은
마이클
안녕 게리, 답변 주셔서 감사합니다. 이것은 나에게 의미가 있지만, 분명히 형식 검사기에는 해당되지 않습니다! 다음과 같은 오류가 발생합니다 :'Error found : in module Main at line 26, column 1 - line 30, column 26 유형 변수가 범위를 벗어났습니다. 식에서 (flip runExists) 값 선언에 을 묻습니다. bindPrompt' –
방금 실제로이 시간을 typechecks하기 위해 전체 구현을 포함하도록 답변을 업데이트했습니다! 즉, 오류 메시지는'runExists'을 flip'ping '때문이 경우, 때때로 처리하는 것은 매우 어려울 수 있지만, 일부 불확실성이 있었다하더라도 그 이후의 (a'가 where' 발생하지 않고에서 람다 골로 연결되지 못했습니다). 그것을'runPA'로 옮기면 읽기가 조금 쉬워지고, 매핑 함수에 명시적인 타입 시그니처를 제공하면 다른 잠재적 인 skolem escape 문제를 피할 수 있습니다. –
굉장! 업데이트 시간을내어 주셔서 감사합니다. 명시 적 rank-n 유형 덕분에 지금은 하스켈 구현보다 훨씬 명확합니다. –