簡體   English   中英

Haskell:[String]到IO()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM