Я часто делаю сопоставление шаблонов в инструкции let, где я знаю форму результата. Понятно, что я не могу ожидать, что компилятор вообще выведет эти знания, но, возможно, существует более идиоматический способ сделать это в сжатой форме.Предупреждение 8: Неполное предупреждение о совпадении шаблонов в заявлении let
В качестве примера, пожалуйста, посмотрите на следующий код:
type foo = A of int | B of string
let x = (true, A 0)
let (b, A i) = x in i + 2
Что правильно предупреждает меня, что результат (_, B _)
не соответствует. Возможный способ явно обрабатывает отсутствующий случай, как в:
let (b,i) = match x with
| (a, A j) -> (a,j+2)
| _ -> failwith "implementation error!"
Но это затемняет фактический расчет. Есть ли более краткий вариант?
Редактировать: Jeffrey Scofield отметил, что в случае без вложенности явная функция преобразования работает хорошо. Есть ли версия для вложенного соответствия типов?
Обычно безопасный подход заключается в определении 'i', а затем определении' x', поэтому вы уже извлекли 'i' без риска ошибки выполнения; например 'let i = 0 ;; пусть x = (true, A i) ;; i + 2 ;; ' –