2016-03-01 147 views
2

我是一名haskell初學者,被IO操作行爲困住。處理IO操作

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

我該如何讓這段代碼工作?

回答

2

if的兩個分支必須具有相同的類型。由於"foo"Stringelse部分也必須是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 
+0

感謝您的善意回覆:)我現在明白了 – Sho

1

if中的thenelse值都需要具有相同的類型。您需要將String轉換爲IO String

return函數會爲你做這個。

main:: IO() 
main = do 
    retval <- if something 
       then return "foo" 
       else getLine 
    print retval 

注意,因爲這是類型IO一的,你還需要使用「< - 」分配retVal的價值,而不是let .. = ..