我已经开始学习Haskell,感到有些不知所措。现在我正在尝试创建一个函数,该函数可以从标准输入或文件列表中的内容返回字符串。
换句话说,我正在尝试复制Unix wc实用程序的行为,当没有给出文件时,它会从stdin获取输入。
我创建了类似于以下内容的代码:
换句话说,我正在尝试复制Unix wc实用程序的行为,当没有给出文件时,它会从stdin获取输入。
我创建了类似于以下内容的代码:
parseArgs [] = [getContents]
parseArgs fs = mapM readFile fs
但是它不能编译,因为在某些情况下我有一个 [IO String] 和在另外一种情况下是 IO [String]。我无法使这个 pattern matching 在所有情况下返回 IO [String]。请指导我正确的方向。
[]
本身就是一个(应用)函子和单子,因此你也可以使用fmap return getContents
或者在Control.Applicative
中使用return <$> getContents
。 (或者您可以将任何一个return
替换为pure
,同样使用Control.Applicative
。) - Antal Spector-Zabusky