Я вижу две проблемы в вашей функции compose
.
При разложении p1
и p2
шаблон должен быть заключен в скобки (в противном случае компилятор интерпретирует код как определениеиз RetryPolicy
функция вместо сопоставления с образцом):
let (RetryPolicy(ShouldRetry(fn))) = p1
let (RetryPolicy(ShouldRetry(fn'))) = p2
При вызове fn'
чуть позже, вам нужно передать ему аргументы в кортеже (в противном случае,компилятор считает, что вы вызываете fn'
с одним аргументом c
, а затем создаете кортеж):
let (cont', delay') = fn' (c,e)
Я не проверял (или пытался запустить) весь пример, поэтомуЯ не знаю, выполняет ли оставшаяся часть кода то, что вы хотите.