在F#中,定义为函数签名的类型称为什么
在F#中,是否有以下方式定义的类型的特殊名称:在F#中,定义为函数签名的类型称为什么,f#,F#,在F#中,是否有以下方式定义的类型的特殊名称: type Foo = int -> string 我这样问是因为这种类型似乎有特殊的意义。与其他类型相比,它是相当抽象的,似乎只能作为一种函数接口使用。它在F#文献中讨论不多,但在许多F#OSS项目的源代码中有相当多的使用 它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为函数的接口之外,它还有其他应用程序吗?尽管可以通过定义一个具有匹配类型签名的函数来实现实例化,但为什么实例化并没有真正意义呢?或者它真的像说它是一个函数定义的别名
type Foo = int -> string
我这样问是因为这种类型似乎有特殊的意义。与其他类型相比,它是相当抽象的,似乎只能作为一种函数接口使用。它在F#文献中讨论不多,但在许多F#OSS项目的源代码中有相当多的使用
它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为函数的接口之外,它还有其他应用程序吗?尽管可以通过定义一个具有匹配类型签名的函数来实现实例化,但为什么实例化并没有真正意义呢?或者它真的像说它是一个函数定义的别名一样简单,然后可以在其他类型签名/定义中作为一个简短的形式使用,并说明它的所有属性?在F#文档中使用的这类定义的名称是,我认为许多人经常将其称为类型别名
该定义为较长的类型定义了别名或较短的名称。它说,无论何时键入Foo
,编译器都会将其视为int->string
- 类型缩写不定义新类型,这意味着
和Foo
是等效的(一种类型的值也是另一种类型的值)。重点是:int->string
- 类型推断通常会推断原始类型,因此当您编写与该类型匹配的函数时,编译器会将其推断为
,除非您给出明确的类型注释int->string
- 编译时,缩写将被删除(因为.NET没有这样的概念),因此编译后的代码将看到
int->string
缩略语只是出于可读性的原因才有用——它允许您对类型使用更具描述性的名称。但是,它们没有太多其他含义。我要补充的是,即使就CLR而言,缩写被删除了,但其他引用编译库的F#代码仍然可以看到它们。