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

Haskell实现类Unix cp命令报错:main: Prelude.!!: index too large

问题分析与解决

错误原因

Prelude.!!: index too large 这个错误表示列表索引超出范围——你的代码用 args !! 0 和 args !! 1 直接取命令行参数,但运行程序时你没传入足够的参数(比如只传了一个参数,或者完全没传),导致 args 列表长度不足2,触发了崩溃。

修复方案

直接用 !! 访问列表元素是不安全的,它不会处理列表长度不足的情况。我们可以通过模式匹配安全处理命令行参数,同时给用户提供清晰的错误提示:

修改后的代码:

import System.IO
import System.Environment
import qualified Data.Text as T
import qualified Data.Text.IO as TI

main :: IO ()
main = do
  args <- getArgs
  case args of
    -- 参数数量正确时执行复制逻辑
    [source, dest] -> do
      input <- TI.readFile source
      TI.writeFile dest input
    -- 参数数量不对时提示用法
    _ -> putStrLn "用法: mycp <源文件路径> <目标文件路径>"

运行注意事项

编译并运行程序时,必须传入两个参数,示例命令:

ghc -o mycp your_code.hs
./mycp 源文件.txt 目标文件.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:50:56