我定義了以下顯示選單并希望 'r' 回傳到 main :: IO。
displayMenu 是 IO BaseProduct 型別,main 是 IO 型別,所以不能有
"r" -> 回傳 main
displayMenu :: IO BaseProduct
displayMenu = do
putStrLn "\n--- Choose and Item ---"
putStrLn "1 - Basic\n2 - Super\n3 - Supreme\n4 - SoftDrink\n5 - Breadsticks\nr - Return"
line <- getLine
case line of
"1" -> do
return basicPizza
"2" -> do
return superPizza
"r" -> do
return ???
另外:我的 displayMenu 的其余代碼是否正常?注意 - 我基于 alvin alexanders post 
uj5u.com熱心網友回復:
函式不能選擇它回傳一個函式來。誰呼叫displayMenu,回傳后重新獲得流量。我認為,您的意思是如何區分產品選擇(有價值)和Return選單選擇(無價值)。一種方法是使用Maybe型別:
displayMenu :: IO (Maybe BaseProduct)
displayMenu = do
putStrLn "\n--- Choose and Item ---"
putStrLn "1 - Basic\n2 - Super\n3 - Supreme\n4 - SoftDrink\n5 - Breadsticks\nr - Return"
line <- getLine
case line of
"1" -> do
return $ Just basicPizza
"2" -> do
return $ Just superPizza
"r" -> do
return Nothing
或者(我更喜歡這種方式),您可以為選單操作創建自定義型別:
data MenuAction = Choice BaseProduct | Back
displayMenu :: IO MenuAction
displayMenu = do
putStrLn "\n--- Choose and Item ---"
putStrLn "1 - Basic\n2 - Super\n3 - Supreme\n4 - SoftDrink\n5 - Breadsticks\nr - Return"
line <- getLine
case line of
"1" -> do
return $ Choice basicPizza
"2" -> do
return $ Choice superPizza
"r" -> do
return Back
在這兩種情況下,都應更改呼叫者以相應地處理結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367046.html
標籤:哈斯克尔
