Yesod의 예외
나는 데몬을 만들었는데 그것은 매우 원시적인 형태를 사용했다.ipc
(특정 워드가 지정된 순서대로 있는 문자열을 telnet하여 전송합니다).갑자기 정신을 차리고 지금 사용하고 있습니다.JSON
전갈을 보내다Yesod
서버.하지만 제 디자인이 정말 마음에 드는 점도 있었고, 지금은 어떤 선택을 해야 할지 잘 모르겠습니다.
제가 하고 있던 일은 이렇습니다.
buildManager :: Phase -> IO ()
buildManager phase = do
let buildSeq = findSeq phase
jid = JobID $ pack "8"
config = MkConfig $ Just jid
flip C.catch exceptionHandler $
runReaderT (sequence_ $ buildSeq <*> stages) config
-- ^^ I would really like to keep the above line of code, or something like it.
return ()
buildSeq의 각 함수는 다음과 같습니다.
foo :: Stage -> ReaderT Config IO ()
data Config = MkConfig (Either JobID Product) BaseDir JobMap
JobMap
는 입니다.TMVar Map
현재 직업에 대한 정보를 추적합니다.
자, 제가 가지고 있는 것은 핸들러입니다. 모두 이렇게 생겼죠.
foo :: Handler RepJson
foo
는 데몬의 명령어를 나타냅니다.핸들러마다 다른 JSON 오브젝트를 처리해야 하는 경우가 있습니다.
내가 하고 싶은 것은 하나 보내는 것이다.JSON
성공을 나타내는 개체와 일부 예외에 대한 정보를 압축하는 다른 JSON 개체입니다.
하고 싶다foo
s 도우미 함수는 다음 명령을 반환할 수 있습니다.Either
하지만 어떻게 해야 할지 모르겠어 게다가 내 행동 목록의 평가를 종료할 수도 있고buildSeq
.
내가 볼 수 있는 유일한 선택은
1) 확인exceptionHandler
는 핸들러에 있습니다.놓다JobMap
에서App
기록.사용.getYesod
적절한 값을 변경하다JobMap
예외에 대한 세부 정보를 나타내며, 다음에 액세스 할 수 있습니다.foo
더 좋은 방법이 있을까요?
다른 선택사항은 무엇입니까?
편집: 알기 쉽게 하기 위해 다음 항목에 대해 설명하겠습니다.Handler RepJson
서버는 다음과 같은 명령어를 받아들일 수 있는 방법이 필요합니다.build
stop
report
클라이언트는 이러한 명령어의 결과를 알 수 있는 방법이 필요합니다.서버와 클라이언트가 서로 통신하는 매체로 JSON을 선택했습니다.JSON 입력/출력을 관리하기 위해서만 핸들러 타입을 사용하고 있습니다.
철학적으로 말하자면, Haskell/Yesod 세계에서는 가치관을 거꾸로 되돌리는 것이 아니라 앞으로 전달하기를 원합니다.따라서 핸들러가 값을 반환하는 대신 프로세스의 다음 단계로 콜 전송하도록 합니다.이것은 예외를 생성하는 경우가 있습니다.
향후의 액션을 1개의 오브젝트에 번들 할 수 있기 때문에, 「이 코드 블록을 실행해 주세요」라고 하는 계속 오브젝트를 핸들러나 foo에 건네줄 수 있습니다.그렇게 하면 그들은 무효가 되고 아무것도 돌려주지 않을 수 있다.
언급URL : https://stackoverflow.com/questions/10133448/exceptions-in-yesod
'source' 카테고리의 다른 글
jq를 사용하여 JSON에서 키 이름을 가져오는 방법 (0) | 2023.04.04 |
---|---|
JavaScriptSerializer()를 사용한 JSON 파일의 역직렬화 (0) | 2023.04.04 |
Angular JS - 양식 억제 제출 취소 버튼 (0) | 2023.04.04 |
Angularjs에서 여러 개의 제출을 방지하기 위해 클릭 한 번 후 제출 버튼을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.04 |
반응/축소 및 다국어(국제화) 애플리케이션 - 아키텍처 (0) | 2023.03.25 |