我是一名haskell初學者,被IO操作行爲困住。處理IO操作
main() :: IO()
retval = if something
then "foo"
else `return value of IO String action` i.e getLine
print retval
我該如何讓這段代碼工作?
我是一名haskell初學者,被IO操作行爲困住。處理IO操作
main() :: IO()
retval = if something
then "foo"
else `return value of IO String action` i.e getLine
print retval
我該如何讓這段代碼工作?
if
的兩個分支必須具有相同的類型。由於"foo"
是String
,else
部分也必須是String
(但不是IO String
)。
可以以使IO String
類型的if
各地做
retval = if something
then return "foo"
else getLine
。這裏,return
將字符串"foo"
轉換爲IO
操作,該操作僅返回"foo"
。
然後,你需要提取String
背出的IO String
因爲print
需要一個字符串(即你進行IO
動作):
retval <- if something
then return "foo"
else getLine
if
中的then
和else
值都需要具有相同的類型。您需要將String
轉換爲IO String
。
return
函數會爲你做這個。
main:: IO()
main = do
retval <- if something
then return "foo"
else getLine
print retval
注意,因爲這是類型IO一的,你還需要使用「< - 」分配retVal的價值,而不是let .. = ..
。
感謝您的善意回覆:)我現在明白了 – Sho