首页 > 解决方案 > 在 Haskell 中为什么我们不能组成 show 和 fst

问题描述

我期待show.fst (1,2)工作。但很惊讶地看到它给出了一个例外。

在运行单个fst (1,2)返回1::Num a => ashow 1打印出 1 作为字符串

show.fst $ (1,2)

工作正常。这更令人困惑,因为我看不到如何进一步减少元组(据我了解,当我们想要评估表达式的正确部分时使用 $ 运算符。

标签: haskell

解决方案


在 Haskell 中,函数应用程序的优先级高于任何运算符,因此

show . fst (1,2)

被解析为

show . (fst (1,2))

而且,因为fst (1,2) == 1它不是一个函数,所以很难用任何东西来组合它。


操作符实际上只是函数应用程序,$但优先级很低。这意味着,相比之下,这

show . fst $ (1,2)

如果解析为

(show . fst) $ (1,2)

这似乎是你想要的。


推荐阅读