Первое выражение
mc $ mc x+11
интерпретируется как
mc ((mc x) + 11)
, поскольку применение функции имеет приоритет над операторами.
Второе выражение
mc $ mc (x+11)
интерпретируется как:
mc (mc (x+11))
Первое действительно никогда не будет оценено, поскольку если вы напишите:
<b>mc x</b> | x > 100 = x-10
| otherwise = mc (<b>(mc x)</b> + 11)
, тогда вы определите mc x
в терминах mc x
,До тех пор, пока mc x
в этом выражении не будет вычислено, вы, таким образом, будете вызывать mc x
при вычислении mc x
, и, таким образом, он будет продолжать делать вызовы.