Является ли это правильным десагерингом вычислительного рабочего процесса? - PullRequest
3 голосов
/ 31 мая 2011

Это из Expert F # 2.0 стр. 231. Видимо, следующий блок кода

attempt { let! n1 = failIfBig inp1
let! n2 = failIfBig inp2
let sum = n1 + n2
return sum };;

обезвоживания к этому:

attempt.Bind( failIfBig inp1,(fun n1 ->
attempt.Bind(failIfBig inp2,(fun n2 ->
attempt.Return sum)))))

но где sum вычисляется в варианте без сахара? Я ожидал чего-то большего:

attempt.Bind( failIfBig inp1,(fun n1 ->
attempt.Bind(failIfBig inp2,(fun n2 -> let sum = n1 +  n2 in
attempt.Return sum)))))

1 Ответ

2 голосов
/ 31 мая 2011

Да, это ошибка в книге, и она должна быть обессахарена, как показано ниже:

attempt.Bind( failIfBig inp1,(fun n1 ->
attempt.Bind(failIfBig inp2,(fun n2 -> let sum = n1 +  n2 in
attempt.Return sum)))))
...