Types 了解以下函数的类型

Types 了解以下函数的类型,types,ocaml,Types,Ocaml,我在OCaml中编写了一个merge_排序函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我试图理解为什么这个函数的类型是 ('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list 而不是 ('a -> 'a -> bool) -> 'a list 因为它只返回一个列表。下面是我的merge_sorted函数代码 let rec merge_sorted lt a b = ma

我在OCaml中编写了一个merge_排序函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我试图理解为什么这个函数的类型是

('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list
而不是

('a -> 'a -> bool) -> 'a list
因为它只返回一个列表。下面是我的merge_sorted函数代码

let rec merge_sorted lt a b = 
    match a with 
    | [] -> b
    | h::t -> match b with
            | []-> a 
            | hh::tt -> if (lt h hh) 
                        then h::merge_sorted lt t b 
                        else hh::merge_sorted lt a tt;;

该函数接受三种类型的参数,即
'a->'a->bool
'a list
,和
'a list
。它返回列表类型的值。函数的类型(当以您的当前形式定义时)由参数类型组成,由
->
分隔,后跟返回类型

因此,类型实际上是
('a->'a->bool)->'a list->'a list->'a list
。前两个列表是第二个和第三个参数类型。最后一个列表是返回类型

这不仅仅是一个符号惯例。您的函数实际上接受一个比较函数(类型为
'a->'a->bool
),并返回一个包含两个参数的函数。返回的函数接受列表(类型为
'a list
)并返回函数。等等