对于使用相同操作数的函数,例如False
或+
不止一次,它将如何评估它?
例如,在以下代码中:
*
如何评估以下内容?
prodOfThree :: Int -> Int -> Int
prodOfThree a b c = a*b*c
据我所知:
prodOfThree (2+3) 4 2
然后我不确定它是先将=> (2 + 3) * 4 * 2
=> 5 * 4 * 2
,5*4
优先还是4*2
一次增加。
答案 0 :(得分:3)
您可以使用ghci要求运营商的 infixity :
*
或者你可以look it up on Hackage。搜索Hackage的好方法是使用Hoogle或Hayoo。
由于infixl 7
具有不在线性a * b * c
,这意味着它是左关联并且优先级 7 。因此,(a * b) * c
为-
。
一个更有趣的例子是一个没有关联性的数学属性的运算符,例如infixl 6
(不要混淆不确定性,它确实具有)。不透明度为a - b - c
,因此(a - b) - c
为:
。
右关联运算符的一个示例是>>> :info (:)
data [] a = ... | a : [a] -- Defined in `GHC.Types'
infixr 5 :
:
a : b : c
所以a : (b : c)
是a : b : c
。请注意,如果它是左关联的,那么org.jboss.spec.javax.faces:jboss-jsf-api_2.2_spec
(可能)会出现类型错误!