Вызов многоадресного активного шаблона напрямую
Рассмотрим один активный шаблон:
let (|ToUpper|) (input : string) = input.ToUpper();;
Я могу вызвать вышеупомянутый активный шаблон одного случая вне явного соответствия:
let g ( ToUpper x ) =x ;;
> val g : string -> string
g ("hello");;
> val it : string = "HELLO"
Если у меня есть следующий многозадачный активный шаблон:
let (|Even|Odd|) n = if (n % 2 = 0) then Even else Odd ;;
Как я могу вызвать вышеупомянутый многозадачный активный шаблон напрямую? Очевидный способ не работает:
let h ( |Even|Odd| n) = n;;
пусть h ( | Четный | Нечетный | n) = n;; -------------------^ /home/shing/stdin(76,20): ошибка FS0623: Идентификаторы регистра активного шаблона должны начинаться с заглавной буквы
Причиной вышеупомянутого запроса является написание теста для активного шаблона без явного введения соответствия. В настоящее время, если я хочу протестировать активный шаблон |Even|Odd|, мне нужно ввести следующую функцию isEven.
let isEven n =
match n with
| Even -> true
| Odd -> false
[<Test>]
let evenTest1() =
(isEven 6) |> should equal true
Было бы хорошо, если бы я мог сделать:
[<Test>]
let evenTest1() =
(|Even|Odd| 6 ) |> should equal Even // Does not work.
Спасибо заранее за любую помощь!
Shing