나는 purescript와 haskell (그리고 자바 스크립트와 노드까지)에 익숙하지 않기 때문에, 나는 purescript에서 자식 프로세스의 결과를 저장하는 방법을 알아내는 데 어려움을 겪고있다. purescript-node-childprocess 및 purescript-node-fs 모듈을 사용하고 있습니다.purescript에서 하위 프로세스의 출력을 캡처하는 방법은 무엇입니까?
위 내 댓글에 나타낸 바와 같이import Node.ChildProcess (CHILD_PROCESS, SpawnOptions, defaultSpawnOptions, Exit(..), spawn, onExit, stdout)
import Node.Stream (onData)
type CPEffect = forall e
. Eff (cp :: CHILD_PROCESS
, console :: CONSOLE
, err :: EXCEPTION
, buffer :: BUFFER | e
) Unit
-- | Basically a wrapper around the spawn command.
-- | Takes a command, an array of arguments, and a record of
-- | options to pass to spawn.
launch :: String -> Array String -> SpawnOptions -> CPEffect
launch cmd args opts = do
cmd' <- spawn cmd args opts
onExit cmd' defaultExitHdlr
-- My problem is with onData due to its return type
onData (stdout cmd') -- what do I put as the callback handler arg?
log $ "done with " <> cmd
이 문제가 Node.Stream 모듈에서 오는으로 onData 기능입니다 : 기본적으로, 나는 데 문제는 이것이다. 어떻게 자식 프로세스 출력을 저장할 수 있습니다, 반환 이후
onData :: forall w eff
. Readable w (err :: EXCEPTION | eff)
-> (Buffer -> Eff (err :: EXCEPTION | eff) Unit)
-> Eff (err :: EXCEPTION | eff) Unit
단위를 반환하는 EFF의입니다 : 문제 유형 2 인수에 반환? 두 번째 인수는 Buffer를 취하고 같은 유형을 반환하는 함수입니다. 실제로, Readable (자식 프로세스의 stdout)에서 데이터를 가져 오는 것은이 함수입니다. 즉, 첫 번째 인수는 하위 프로세스의 노드에서 stdout 스트림이고 두 번째 인수는 stdout 스트림에서 버퍼를 채울 콜백 핸들러입니다.
그러나 콜백 처리기가 Unit을 반환하므로 하위 프로세스의 출력을 누적 할 수있는 방법이 표시되지 않습니다. 나는 아직도 Monad Transformers를 배우는 중이다. 그래서 이것은 해결책인가? 어떻게 든 이것을 감싸는 Writer 모나드를 만들 수 있습니까?
감사합니다. hdgarrood에게 감사 드리며,이 작업이 어떻게 수행되었는지 확인하겠습니다. 나는 기존 모듈의 소스 코드를 보면서 대부분의 purescript를 배우고있다. –