在Haskell中,为什么我们不能写出show和fst

pee*_*ngh 0 haskell

我本以期待show.fst (1,2)工作.但我很惊讶地发现它有例外.

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

show.fst $ (1,2)
Run Code Online (Sandbox Code Playgroud)

工作良好.这更令人困惑,因为我没有看到如何进一步减少元组(据我所知,当我们想要评估表达式的正确部分时使用$运算符.

lis*_*rus 10

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

show . fst (1,2)
Run Code Online (Sandbox Code Playgroud)

被解析为

show . (fst (1,2))
Run Code Online (Sandbox Code Playgroud)

并且,由于fst (1,2) == 1不是一个功能,很难用任何东西组成它.


$运营商实际上只是功能应用,但有一个非常低的优先级.相反,这意味着这一点

show . fst $ (1,2)
Run Code Online (Sandbox Code Playgroud)

如果解析为

(show . fst) $ (1,2)
Run Code Online (Sandbox Code Playgroud)

这似乎是你想要的.


jwo*_*der 6

因为.优先级低于函数应用程序,show.fst (1,2)所以相当于show . (fst (1,2))等于show . 1,这1不是一个函数,没有多大意义.