簡體   English   中英

如何創建一個將IO String轉換為IO [String]的Haskell函數?

[英]How to create a Haskell function that turns IO String into IO [String]?

我開始學習Haskell並感到不知所措。 我現在正在嘗試創建一個函數,該函數從標准輸入或文件列表的內容返回一個字符串。 換句話說,我正在嘗試復制Unix wc實用程序的行為,該實用程序在沒有給出文件時從stdin獲取輸入。

我創造了這樣的東西:

parseArgs [] = [getContents]
parseArgs fs = mapM readFile fs

但是它沒有編譯,因為在一種情況下我有[IO String]而在另一個IO [String]中。 在所有情況下,我無法使此模式匹配以返回IO [String]。 請指出正確的方向。

要使第一個模式也是IO [String] ,您必須首先從列表中解壓縮值,然后重新打包它。 像這樣的東西:

do c <- getContents
   return [c]

在正常的monadic表示法中:

getContents >>= \c -> return [c]

在這種情況下,通常最好使用仿函數而不是monad。 然后你可以避免return

fmap (:[]) getContents

(:[])\\x -> [x]具有相同的含義,它創建一個單例列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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