Почему это F # / OCaml компилирует выражение?

Этот код прекрасно компилируется как в F #, так и в OCaml:

let testmatch k =
    match k with
    | jqk3jtl23jtlk123 -> true

Я тестировал как в FSI, так и в utop. Всегда возвращает true.

jqk3jtl23jtlk123 является полностью случайным, и его тип выводится как 'a. Даже если я ограничу k типом данных (например, let testmatch (k: int) =), он компилируется (хотя очевидно, что тип testmatch ограничивается int -> bool вместо 'a -> bool.

. Может кто-нибудь объяснить, что происходит?) on? В частности:

  • , почему компилятор принимает полностью случайный литерал jqk3jtl23jtlk123?
  • , почему я не получаю предупреждение о неисчерпывающем совпадении?
  • Что такое матч на самом деле?
8
задан glennsl 19 October 2017 в 13:13
поделиться