gpt4 book ai didi

haskell - `stdin` 和 `stdout` 句柄

转载 作者:行者123 更新时间:2023-12-04 09:48:53 25 4
gpt4 key购买 nike

我正在测试一个程序。具体来说,我正在单独测试一个功能。它需要一个可以读写的句柄。问题是,stdinstdout一个人无法完成这项工作。我不想仅仅因为这样的测试而重写我的代码,我也不想为了测试而不得不打开一个套接字。此外,该程序还不能使用(功能未定义),所以我不能通过运行它来测试它。

什么是从 stdin 获取输入的句柄并从 stdout 输出在 haskell 。

最佳答案

一种简单的方法是使用 Pipe抽象出对句柄的读取和写入。您可以使用的一种类型是:

example :: Monad m => Pipe String String m ()

例如,假设您的原始代码如下所示:
original :: IO ()
original = do
str1 <- getLine
str2 <- getLine
putStrLn (str1 ++ str2)

pipes版本看起来像这样:
import Pipes

example :: Monad m => Pipe String String m ()
example = do
str1 <- await
str2 <- await
yield (str1 ++ str2)

然后,您可以像这样纯粹地测试它:
>>> import qualified Pipes.Prelude as Pipes
>>> Pipes.toList (each ["Hello, ", "world!"] >-> example)
["Hello, world!"]

...或者您可以使用真实的输入和输出对其进行测试:
>>> runEffect $ Pipes.stdinLn >-> example >-> Pipes.stdoutLn
Hello, <Enter>
world!<Enter>
Hello, world!

这可以让你保持你的主要逻辑纯粹,然后选择是否纯粹或不纯粹地运行它。

关于haskell - `stdin` 和 `stdout` 句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22875449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com