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

如何在Agda 2.6+版本中读取命令行字符串输入?

在Coq中实现输入回显的最简IO程序

最简可运行代码

以下是对应你需求的Coq实现,分为两种写法:

基础bind调用写法

Require Import Coq.Strings.String.
Require Import Coq.IO.IO.
Require Import Coq.IO.String.

Definition main : IO unit :=
  IO.bind getLine (fun s => putStrLn s).

Do记法写法(贴近Haskell风格)

如果偏好Haskell的do语法,需要导入额外模块启用语法糖:

Require Import Coq.Strings.String.
Require Import Coq.IO.IO.
Require Import Coq.IO.String.
Require Import Coq.Program.Do.

Definition main : IO unit :=
  do s <- getLine;
     putStrLn s.

常见问题解析

  1. 类型不匹配报错原因
    你遇到的「无法统一不同IO定义」问题,大多是因为没完整导入标准库IO模块。getLine和putStrLn来自Coq.IO.String,IO monad核心定义在Coq.IO.IO,必须同时导入才能保证类型一致。

  2. Coq与Haskell IO的差异
    Coq的IO monad设计和Haskell有细节区别:

  • Coq的bind需要显式调用IO.bind(或通过Do记法隐式处理),默认没有Haskell的>>=语法;
  • 必须依赖标准库Coq.IO下的模块实现,混用第三方或自定义IO会引发类型冲突。
  1. Musical Notation失效问题
    Coq默认不支持Haskell式的>>=符号语法,直接使用会触发语法或类型错误,推荐用标准IO.bind或Do记法实现序列操作。

运行方式

编译代码后,在Coq环境中执行Eval compute in main.即可触发输入回显逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:40:19