我正在hspec做一些基本的测试。
我有一个argsParser给定一些参数的函数,返回或更确切地说打印其有效性。
argsParser :: [String] -> IO ()
argsParser args | null args = print "no args provided"
| not $ null args && length args < 2 = print "no file name provided"
| length args > 2 == print "too many arguments"
| otherwise = goAhead args
Run Code Online (Sandbox Code Playgroud)
问题是我不确定如何IO ()与另一个进行比较IO ()。
我以为可能liftIO会有所帮助
x <- liftIO $ print "something"
y <- liftIO $ print "anything"
Run Code Online (Sandbox Code Playgroud)
我懂了
x == y = True
Run Code Online (Sandbox Code Playgroud)
我怀疑是因为两者都是actions。
chi*_*chi 12
您无法将IO操作与其他操作进行比较。可计算性理论指出,无法确定两个IO值是否相等。因此,Eq (IO a)Haskell中没有实例。
充其量,您可以尝试运行这两个动作,从外部观察它们的效果,然后比较它们的效果-这并不总是可行的(例如,如果一个动作是一个无限循环,如果该动作需要用户输入),但是可以足够接近。可以通过将操作作为子流程运行,重定向其标准输出/错误来实现此检查。
(不过,为什么要比较IO操作?这很不寻常)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |