Я пытаюсь следить на бумаге «Lightweight высших kinded полиморфизм» (https://ocamllabs.github.io/higher/lightweight-higher-kinded-polymorphism.pdf) и я застрял на преобразовании этого ML кода в F #Transform ML код F # (выше-kinded полиморфизм)
type (_,_) arrow =
Fn_plus : ((int ∗ int), int) arrow
| Fn_plus_cons : int → ((int ∗ int list), int list) arrow
и
let apply : type a b. (a, b) arrow ∗ a → b =
fun (appl, v) → match appl with
| Fn_plus → let (x, y) = v in x + y
| Fn_plus_cons n → let (x, l’) = v in x + n :: l’
в частности, определение типа чувствует себя как большой волшебной стеной.
F # не поддерживает полиморфизм более высокого порядка. Извините, нет возможности сделать это без хакеров. –
@FyodorSoikin - Статья посвящена кодированию более высокого рода полиморфизма на языках, которые не поддерживают его напрямую. – Lee
Да, я знаю. Но, насколько я знаю, ни Окамл, ни МЛ. И в приведенной выше статье объясняется подход де-функционализации для создания «облегченных более высоких типов». Я думаю, что 2 фрагмента кода не имеют HKTs – robkuz