Ответ rmunn правильный, но я бы хотел добавить подробности.
Вы можете добавить конструктор в качестве параметра функции make
, чтобы вы могли использовать make
, чтобы частично применить любойКонструктор, который принимает пару (кортеж 2) в качестве параметра:
type TypeA =
| A of int*int
| B of int*string
type TypeB =
| C of int*float
// make : (('a * 'b -> 'c) -> 'a -> 'b -> 'c)
let make t a b = t(a,b)
// x : int -> TypeA
let x = make A 1
// y : string -> TypeA
let y = make B 2
// z : float -> TypeB
let z = make C 3
Фактически, он работает с любой функцией, которая принимает пару в качестве параметра, поэтому имя make
в этом случае слегка вводит в заблуждение,