[英]Haskell: [String] to IO ()
我是Haskell的新手,我正在嘗試從輸入中獲取值列表,並從列表中每行打印一個項目。
func :: [String] -> IO ()
當列表大小只為1時,我無法弄清楚如何打印列表中的項目。
func [] = return ()
func [x] = return x
我在嘗試編譯文件時收到此錯誤消息:
Couldn't match expected type `()' with actual type `String'
In the first argument of `return', namely `x'
In the expression: return x
我完全失去了,我嘗試過搜索,但沒有找到任何東西。 謝謝!
你可以使用forM_
:
func :: [String] -> IO ()
func l = forM_ l putStrLn
如果您想直接編寫自己的版本,則會遇到一些問題。
對於空列表,您無需做任何事情,只需創建IO ()
的值,您可以使用return執行此操作。
對於非空列表,您希望使用putStrLn
輸出行,然后處理列表的其余部分。 非空列表的形式為x:xs
其中x
是列表的頭部和xs
的尾部。 您的第二個模式與單元素列表匹配。
func [] = return ()
func (x:xs) = putStrLn x >> func xs
func = mapM_ putStrLn
mapM_
將mapM_
等putStrLn
函數應用於列表的每個元素,並丟棄返回值。
你實際上並沒有嘗試打印任何東西,你使用putStr。 嘗試類似的東西
print [] = return ()
print (x:xs) = do
putStr x
print xs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.