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

Haskell反向函数应用运算符(&)无法工作的原因咨询

为什么Haskell的反向函数应用运算符(&)无法工作?

这个问题我之前刚接触Haskell时也踩过坑,其实原因很简单——你还没导入&运算符所在的模块!

你看到的错误Variable not in scope: (&) :: [Char] -> ([a0] -> Int) -> t,核心问题是**&并不在GHC默认加载的Prelude模块导出列表里**,它属于Data.Function模块,所以默认情况下GHCi或你的代码里找不到这个符号。

快速解决方法

1. 在GHCi中临时导入

直接在GHCi提示符下执行导入命令:

Prelude> import Data.Function (&)

或者导入整个Data.Function模块:

Prelude> import Data.Function

之后再运行你的代码:

Prelude Data.Function> "hello" & length
5

就能得到你期望的结果了。

2. 在Haskell源码中导入

如果是写在.hs文件里,只需要在文件顶部加上导入语句:

import Data.Function (&)  -- 仅导入&运算符,避免引入多余内容
-- 或者
import Data.Function       -- 导入整个模块的所有函数

额外补充:&和$的区别

可能你已经熟悉正向函数应用运算符$,&其实就是它的反向版本:

  • f $ x 等价于 f x,作用是减少括号嵌套,让代码从右往左读更顺畅
  • x & f 同样等价于 f x,适合把函数调用链按从左到右的管道风格书写

举个直观的例子:

-- 原生写法(括号嵌套多)
length (map toUpper (filter (/='l') "hello"))

-- 用$的写法(从右往左读)
length $ map toUpper $ filter (/='l') "hello"

-- 用&的写法(从左往右读,像流水线)
"hello" & filter (/='l') & map toUpper & length

这种管道风格在处理多步连续操作时,可读性会明显更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:56