主要功能的类型并不意味着我的应用程序

0 io monads haskell

我们知道主要功能有类型IO ().但是,这对我来说是个问题,因为我的程序可能会返回错误.这意味着我正在从main函数执行类似的东西:

ErrorT String IO ()  
Run Code Online (Sandbox Code Playgroud)

当然,此刻我遇到了类型错误的问题.

我该怎么办 ?

args <- getArgs
s <- readFile $ head args
myFoo s
Run Code Online (Sandbox Code Playgroud)

哪里 myFoo :: String -> ErrorT String IO ()

Lee*_*Lee 6

您需要运行它runErrorT:

runErrorT :: ErrorT e m a -> m (Either e a)
Run Code Online (Sandbox Code Playgroud)

因为myFoo返回a ErrorT String IO ()将评估IO (Either String ())你执行的main并匹配结果:

args <- getArgs
s <- readFile $ head args
result <- runErrorT (myFoo s)
case result of
  Right _ -> putStrLn "ok!"
  Left(err) -> putStrLn $ "Error: " ++ err
Run Code Online (Sandbox Code Playgroud)