繁体   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