You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell多文件内容输出实现问题及代码修改方案求解

Haskell多文件读取问题修复方案

问题根因

你提供的代码仅能输出单个内容的核心问题出在main函数的输出逻辑:putStrLn (head contents)仅取读取结果列表的第一个元素打印,其余所有结果(包括其余文件的内容、其余路径的错误提示)都被直接丢弃。

修复后完整代码

module Main where
import System.Environment
import System.IO (readFile)
import System.Directory

main :: IO ()
main = do fs <- getArgs
          contents <- readFiles fs
          putStr $ concat contents -- 拼接所有结果后输出

readFiles :: [String] -> IO [String]
readFiles [] = return []
readFiles (x:xs) = do
    doesExist <- doesFileExist x
    if doesExist then do      
        contents <- readFile x
        others <- readFiles xs
        return (contents:others)
    else do 
        others <- readFiles xs
        return (("cat: " ++ x ++ ": No such file or directory\n") : others)

改动说明

  • 仅修改main函数的输出逻辑即可实现需求:将所有读取结果按路径传入顺序拼接后统一输出,错误提示和存在的文件内容都会按顺序打印,完全符合你给出的示例输出要求。
  • 也可以使用mapM_ putStr contents替代putStr $ concat contents,二者运行效果完全一致。

内容的提问来源于stack exchange,提问作者Ryan Harding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:27:03