我是一名哈斯克尔初学者,并且陷入了IO动作行为。
main() :: IO()
retval = if something
then "foo"
else `return value of IO String action` i.e getLine
print retval
如何使此代码有效?
答案 0 :(得分:2)
if
的两个分支都必须具有相同的类型。由于"foo"
为String
,else
部分也必须是String
(但不是IO String
)。
你可以做到
retval = if something
then return "foo"
else getLine
为了制作if
类IO String
的所有部分。在此处,return
会将字符串"foo"
转换为仅返回IO
的{{1}}操作。
然后,您需要从"foo"
中提取String
,因为IO String
需要一个字符串(即您执行print
操作):
IO
答案 1 :(得分:1)
中的
需要具有相同的类型。您需要将 then
和 else
值如果 String
转换为 IO String
。
return
函数将执行这适合你。
main :: IO()
 main = do
 retval< - 如果有什么
然后返回“foo”
其他getLine
 print retval



 请注意,因为这是类型IO a,您还需要使用“< - ”分配retVal的值,而不是 let .. = ..
。