gpt4 book ai didi

haskell - 如何创建一个 Haskell 函数将 IO String 转换为 IO [String]?

转载 作者:行者123 更新时间:2023-12-02 13:11:55 24 4
gpt4 key购买 nike

我已经开始学习 Haskell 并对其感到不知所措。我现在尝试创建一个函数,该函数从标准输入或文件列表的内容返回字符串。换句话说,我试图复制 Unix wc 实用程序的行为,该实用程序在没有给出文件时从 stdin 获取输入。

我创建了这样的东西:

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

但它无法编译,因为在一种情况下我有 [IO String],而在另一种情况下我有 [String]。我无法使此模式匹配在所有情况下都返回 IO [String]。请指出我正确的方向。

最佳答案

要使第一个模式也是 IO [String],您必须先从列表中解压值,然后重新打包。像这样的事情:

do c <- getContents
return [c]

在正常的一元表示法中:

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

在这种情况下,通常最好使用仿函数而不是 monad。然后你就可以避免返回:

fmap (:[]) getContents

(:[])\x -> [x] 含义相同,它创建一个单例列表。

关于haskell - 如何创建一个 Haskell 函数将 IO String 转换为 IO [String]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com