gpt4 book ai didi

haskell - 我如何测试从 GHCi 中的标准输入读取的程序?

转载 作者:行者123 更新时间:2023-11-28 21:07:54 25 4
gpt4 key购买 nike

我的程序有一个错误,我想在 GHCi 中看到:

$ ./my-program < ./my-data
Prelude.foldl1: empty list

我尝试在 GHCi 中更改 stdingetLine 但它似乎不会影响我的程序使用的 getLine,即使我加载之后:

$ ghci
Prelude> import System.IO
Prelude System.IO> getLine <- fmap hGetLine $ openFile "my-data" ReadMode
:l "my-program.hs"
:main

我是否需要重写我的所有 IO 以采用显式句柄以便能够在 GHCi 中测试它们?

最佳答案

您可以尝试用这样的方式包装您的程序(经过测试,工作代码):

import qualified System.IO
import qualified GHC.IO.Handle

filename = "/tmp/myfilename"

main = do
h <- System.IO.openFile filename System.IO.ReadMode
old_stdin <- GHC.IO.Handle.hDuplicate System.IO.stdin
GHC.IO.Handle.hDuplicateTo h System.IO.stdin
System.IO.hClose h
realMain
GHC.IO.Handle.hDuplicateTo old_stdin System.IO.stdin

realMain = ...

还应该可以定义一个用户定义的 GHCi 命令,它可以为任何 GHCi 命令执行此操作,但我还没有尝试过。参见 here对于某人的 .ghci,它使用用户定义的 :redir 命令重定向命令的 stdout

关于haskell - 我如何测试从 GHCi 中的标准输入读取的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50931355/

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