模块 GF.系统。过程 哪里
进口 系统。过程
进口 系统。IO(输入输出)(hGetContents(获取内容),h关闭,hPutStr(推进器))
进口 控制。并发(分叉IO)
进口 GF.系统。捕捉(尝试)

--|向shell进程提供一些输入,并懒洋洋地读取输出
读取Shell进程 时间: 字符串     --^shell命令
                  -> 字符串    --^ shell命令的输入
                  -> IO(输入输出) 字符串 --^ shell命令的输出
readShellProcess::String->String->IO字符串读取Shell进程 字符串cmd公司 字符串输入 =
   (只是 把手标准输入,只是 把手标准输出,也许是把手没有什么,进程句柄酸碱度) <-
         创建进程->IO(可能句柄、可能句柄、也许句柄、进程句柄)创建进程 (字符串->CreateProcess 字符串cmd公司){标准_输入::标准流标准输入=标准流创建管道,标准输出::标准流标准输出(_O)=标准流创建管道}
     IO()->IO线程IDfork IO(分叉IO) (IO()->IO线程ID)->IO()->IO线程ID对于所有a b(a->b)->a->b$  IO()->IO(IOError()之一)对于所有a.IO a->IO(任一IO错误a)尝试 (IO()->IO(任一IOError()))->IO()->IO(IOError()之一)对于所有a b(a->b)->a->b$ 句柄->字符串->IO()hPutStr(推进器) 把手标准输入 字符串输入
                 IO()->IO(IOError()之一)对于所有a.IO a->IO(任一IO错误a)尝试 (IO()->IO(任一IOError()))->IO()->IO(任一IOError()))对于所有a b(a->b)->a->b$ 句柄->IO()h关闭 把手标准输入
                 ProcessHandle->IO出口代码等待处理 进程句柄酸碱度
                 ()->IO()对于所有(m::*->*)a.Monad m=>a->ma返回 ()
     句柄->IO字符串hGetContents(获取内容) 把手标准输出