在F#中,是否有以下列方式定义的类型的特殊名称:
type Foo = int -> string
Run Code Online (Sandbox Code Playgroud)
我问,因为这种类型似乎具有特殊意义.与其他类型相比,它是相当抽象的,似乎只能用作一种功能接口.在F#文献中没有多少讨论,但它在许多F#OSS项目的源代码中使用得相当多.
它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为功能的接口之外,它还有其他应用程序吗?为什么实例化实际上没有意义,即使你可以通过定义具有匹配类型签名的函数来做到这一点?或者它是否真的就像说它是函数定义的别名一样简单,然后可以在其他类型的签名/定义中用作简短形式并且考虑它的所有属性?
这种定义的F#文档中使用的名称是类型缩写,我想很多人经常将它称为类型别名.
该定义为较长类型定义别名或较短名称.它表示无论何时键入Foo,编译器都会将其视为int -> string.
类型缩写没有定义新类型的,这意味着Foo和int -> string等同(一种类型的值也是其他类型的值).重点是:
类型推断通常会推断原始类型,因此当您编写与该类型匹配的函数时,编译器会将其推断为int -> string除非您提供显式类型注释
编译时,缩写被删除(因为.NET没有这样的概念),所以编译后的代码会看到int -> string.
缩写只是出于可读性原因而有用 - 它允许您为类型使用更具描述性的名称.但是,它们没有其他许多含义.