PureScript入门遇问题:参数列表不匹配及REPL使用疑问
嘿,我来帮你逐个梳理这些问题:
1. PureScript:「Argument list lengths differ in declaration」错误与空白链接问题
这个错误的核心原因很明确:函数的声明签名和实际实现的参数数量不匹配。举个例子,如果你写了这样的代码:
-- 声明里说这个函数接受2个Int参数 addNumbers :: Int -> Int -> Int -- 但实现却只定义了1个参数 addNumbers x = x + 5
这种情况下就会触发这个错误。你只需要检查所有函数的签名和对应实现的参数个数,确保两者一致就能解决。
至于点击错误链接后页面空白的问题,大概率是本地PureScript的文档资源没有正确安装,或者你的开发工具(编辑器/REPL)指向的文档路径出了问题。不用纠结这个跳转链接,直接去PureScript官方文档里搜索这个错误关键词,就能找到对应的解决方案。
2. PureScript REPL Tab键提示「Display all 136 possibilities? (y or no)」
这是REPL的自动补全功能在工作:当你按Tab时,当前输入的前缀匹配了大量可用的标识符(比如变量、函数、类型等),REPL没法一次性显示所有结果,所以会询问你是否展开全部。
这个提示和你用2个空格缩进的习惯完全没关系——缩进是代码编辑时的格式规范,而这个Tab是REPL的补全触发键。如果不想频繁碰到这个提示,建议输入更具体的前缀再按Tab(比如先输入calc再按Tab,而不是只输入c),这样匹配的结果会少很多,就能直接显示补全选项了。
3. TypeScript REPL 多行代码是否只能用:paste模式?
是的,通过tsc --repl启动的标准TypeScript REPL,必须使用:paste模式来输入多行代码。因为默认的单行模式下,你按下回车就会立即执行当前行的代码,没法输入未完成的多行结构(比如嵌套的if语句、函数体、类定义等)。
不过有个例外:如果你用ts-node的REPL(通过ts-node命令启动),它会自动识别未闭合的语法(比如未闭合的大括号、括号),允许你继续输入下一行,不需要手动进入:paste模式。但如果是官方的TypeScript REPL,:paste模式是输入多行代码的唯一方式。
内容的提问来源于stack exchange,提问作者Knows Not Much

