在F#中,您将什么称为定义为函数签名的类型

时间:2016-07-16 19:16:00

标签: f#

在F#中,是否有以下列方式定义的类型的特殊名称:

type Foo = int -> string

我问,因为这种类型似乎具有特殊意义。与其他类型相比,它是相当抽象的,似乎只能用作一种功能接口。在F#文献中没有多少讨论,但它在许多F#OSS项目的源代码中使用得相当多。

它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为功能的接口之外,它还有其他应用程序吗?为什么实例化实际上没有意义,即使你可以通过定义具有匹配类型签名的函数来做到这一点?或者它是否真的就像它说它是函数定义的别名一样简单,然后可以在其他类型的签名/定义中用作简短形式并考虑它的所有属性?

1 个答案:

答案 0 :(得分:5)

此类定义的F#文档中使用的名称是type abbreviation,我认为很多人经常将其称为类型别名

该定义为较长类型定义别名或较短名称。它表示无论何时键入Foo,编译器都会将其视为int -> string

  • 类型缩写没有定义 new 类型,这意味着Fooint -> string是等价的(一种类型的值也是一个值其他类型)。重点是:

  • 类型推断通常会推断原始类型,因此当您编写与该类型匹配的函数时,编译器会将其推断为int -> string,除非您提供显式类型注释

  • 编译时,缩写将被删除(因为.NET没有这样的概念),因此编译的代码将显示int -> string

缩写只是出于可读性原因而有用 - 它允许您为类型使用更具描述性的名称。但是,它们没有其他许多含义。