gpt4 book ai didi

types - ocaml类型 'a. ' a->'a是什么意思?

转载 作者:行者123 更新时间:2023-12-04 03:24:31 25 4
gpt4 key购买 nike

在ocaml语言规范中,有一小段内容:

poly-typexpr ::= typexpr
| { ' ident }+ . typexpr

文本中没有任何解释,并且 poly-typexpr的唯一实例是定义方法类型:
method-type ::= method-name : poly-typexpr

这允许我做什么?

最佳答案

还可以将poly-typexpr作为记录字段的类型(请参阅Section 6.8.1)。尽管有some debate on that point,但它们通常被称为“存在类型”。以这种方式使用多态类型会更改类型变量的范围。例如,比较类型:

type 'a t = { f : 'a -> int; }
type u = { g : 'a. 'a -> int; }
t实际上是一类类型,每种类型对应 'a的每个可能值。每个 'a t类型的值都必须具有一个 f类型的字段 'a -> int。例如:
# let x = { f = fun i -> i+1; } ;;
val x : int t = {f = <fun>}
# let y = { f = String.length; } ;;
val y : string t = {f = <fun>}

相比之下, u是单个类型。任何 u类型的每个值都必须具有一个 g字段,该字段的类型必须是 'a -> int'a类型。例如:
# let z = { g = fun _ -> 0; } ;;
val z : u = {g = <fun>}

注意这里 g完全不依赖于其输入的类型。如果是这样,它将没有 'a. 'a -> int类型。例如:
# let x2 = { g = fun i -> i+1; } ;;
This field value has type int -> int which is less general than 'a. 'a -> int

关于types - ocaml类型 'a. ' a->'a是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1936534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com