我想打开一个伪tty,并使用生成的从属终端连接到子进程上的stdin / stdout。openPseudoTerminal
给我一个IO (System.Posix.Types.Fd, System.Posix.Types.Fd)
,我试图将其转化为一对句柄(特定fdToHandle
于GHC.IO.Handle.Fd
GHC,但我找不到其他这样的函数)。但是,我得到以下信息:
liftA (fdToHandle *** fdToHandle) openPseudoTerminal Couldn't match type `System.Posix.Types.Fd' with `System.Posix.Internals.FD'
有什么想法可以在这两个(大概相似)的事物之间转换吗?
对于奖励积分,这将给我IO (IO Handle, IO Handle)
-是否有一种巧妙的方法可以将其转换为IO (Handle, Handle)
?
openPseudoTerminal
在Unix软件包中,该软件包还在中提供了fdToHandle
具有适当类型的System.Posix.IO
。
我将使用到目前为止我提出的最好的单线处理这对IO Handle
s:
getHandles :: IO (Handle, Handle) getHandles = openPseudoTerminal >>= uncurry ap . (fmap (,) . fdToHandle *** fdToHandle)
要么:
getHandles = openPseudoTerminal >>= uncurry (ap . fmap (,)) . join (***) fdToHandle