我期望show.fst (1,2)
工作。但是很惊讶地看到它给出了例外。
在运行单个fst (1,2)
时返回1::Num a => a
,而show 1
将1打印为字符串
show.fst $ (1,2)
工作正常。更加令人困惑,因为我看不到如何进一步减少元组(据我了解,当我们希望对表达式的正确部分求值时,使用$运算符。
答案 0 :(得分:10)
在Haskell中,函数应用程序的优先级高于任何运算符,因此
show . fst (1,2)
解析为
show . (fst (1,2))
而且,由于fst (1,2) == 1
不是函数,所以很难用任何东西组成它。
$
运算符实际上只是函数应用程序,但是优先级很低。相比之下,这意味着
show . fst $ (1,2)
如果解析为
(show . fst) $ (1,2)
这似乎是您想要的。
答案 1 :(得分:6)
因为.
的优先级低于函数应用程序的优先级,所以show.fst (1,2)
等于show . (fst (1,2))
,等于show . 1
,与{{1} }不是函数。