haskell - 处理 IO 操作

标签 haskell monads

我是一个 Haskell 初学者,并陷入了 IO 操作行为。

main() :: IO()
  retval = if something
             then "foo"
             else `return value of IO String action` i.e getLine
  print retval

我怎样才能让这段代码工作?

最佳答案

if的两个分支必须具有相同的类型。自 "foo"Stringelse部分必须是 String也是(但不是 IO String )。

你可以做到

retval = if something
           then return "foo"
           else getLine

为了使if的所有部分类型 IO String 。在这里,return转换字符串 "foo"IO只返回 "foo" 的操作.

然后,您需要提取 String退出IO String因为print需要一个字符串(即您执行 IO 操作):

retval <- if something
            then return "foo"
            else getLine

关于haskell - 处理 IO 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35717861/

相关文章:

json - 使用 Haskell 对巨大的 json 数组进行子采样

haskell - 成员函数对于 float 无法正常工作

haskell - 在 ghci 中用花括号做 block 会引发错误

regex - 如何捕获haskell正则表达式中的字符串?

haskell - Monad Bind 坚持不同的类型?

haskell - 在do block 中具有不同Left的Chain ExceptT

haskell - `Monad ((,) w)` 实例在任何地方都是标准的吗?

haskell - 我可以拥有完全多态的函数吗?

haskell - Langage.Haskell.TH.report 是如何工作的?

haskell - 匹配 Haskell 中的任何列表