处理IO动作
Dealing with IO action
我是一个 haskell 初学者并且被 IO 动作行为困住了。
main() :: IO()
retval = if something
then "foo"
else `return value of IO String action` i.e getLine
print retval
我怎样才能让这段代码工作?
then
和 else
中的值 if
需要具有相同的类型。您需要将 String
转换为 IO String
.
return
函数将为您执行此操作。
main:: IO()
main = do
retval <- if something
then return "foo"
else getLine
print retval
注意,因为this是IO a类型的,所以retVal的赋值也需要使用“<-”,而不是let .. = ..
。
if
的两个分支必须具有相同的类型。由于 "foo"
是 String
,因此 else
部分也必须是 String
(但不是 IO String
)。
你可以做到
retval = if something
then return "foo"
else getLine
为了使 if
的所有部分成为 IO String
类型。这里,return
将字符串 "foo"
转换为一个 IO
动作,它只是 returns "foo"
.
然后,您需要从 IO String
中提取 String
,因为 print
需要一个字符串(即您执行 IO
操作):
retval <- if something
then return "foo"
else getLine
我是一个 haskell 初学者并且被 IO 动作行为困住了。
main() :: IO()
retval = if something
then "foo"
else `return value of IO String action` i.e getLine
print retval
我怎样才能让这段代码工作?
then
和 else
中的值 if
需要具有相同的类型。您需要将 String
转换为 IO String
.
return
函数将为您执行此操作。
main:: IO()
main = do
retval <- if something
then return "foo"
else getLine
print retval
注意,因为this是IO a类型的,所以retVal的赋值也需要使用“<-”,而不是let .. = ..
。
if
的两个分支必须具有相同的类型。由于 "foo"
是 String
,因此 else
部分也必须是 String
(但不是 IO String
)。
你可以做到
retval = if something
then return "foo"
else getLine
为了使 if
的所有部分成为 IO String
类型。这里,return
将字符串 "foo"
转换为一个 IO
动作,它只是 returns "foo"
.
然后,您需要从 IO String
中提取 String
,因为 print
需要一个字符串(即您执行 IO
操作):
retval <- if something
then return "foo"
else getLine