有人能给我一个使用Monadic QuickCheck测试IO操作的简单示例吗?
我正在尝试测试一个带有命令行参数并将其输出到屏幕的小功能(或更确切地说是IO Action)。我原来的(无法调试的)功能是:
-- In Library.hs
module Library where
import System.Environment (getArgs)
run :: IO ()
run = do
args <- getArgs
putStrLn $ head args
Run Code Online (Sandbox Code Playgroud)
细算这个答案约嘲讽,我想出了一个办法来嘲笑getArgs和putStrLn使用类型的类约束类型。因此,以上功能变为:
-- In Library.hs
module Library where
class Monad m => SystemMonad m where
getArgs :: m [String]
putStrLn :: String -> m ()
instance SystemMonad IO where
getArgs = System.Environment.getArgs
putStrLn = Prelude.putStrLn
run :: SystemMonad m => m ()
run = do
args <- Library.getArgs
Library.putStrLn $ …Run Code Online (Sandbox Code Playgroud)