Haskell将评估两个具有相同优先级的操作数的顺序是什么?

时间:2016-05-03 14:55:50

标签: haskell lazy-evaluation operator-precedence

对于使用相同操作数的函数,例如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一次增加。

1 个答案:

答案 0 :(得分:3)

您可以使用ghci要求运营商的 infixity

*

或者你可以look it up on Hackage。搜索Hackage的好方法是使用HoogleHayoo

由于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(可能)会出现类型错误!