lambdakris
lambdakris

Reputation: 675

In F#, what do you call a type defined as a function signature

In F#, is there a special name for a type defined in the following manner:

type Foo = int -> string

I ask because such a type seems to have special significance. It is quite abstract compared to other types and seems to only be usable as a sort of function interface. It is not discussed much in F# literature, but it is used quite a bit in the source of many F# OSS projects.

Is it a special sort of type that has some broader significance in functional programming? Does it have other applications other than functioning as a sort of interface for functions? Why is it something that doesn't really make sense to instantiate, even though you can kind of do that by defining a function with a matching type signature? Or is it really just as simple as saying that it is an alias for a function definition which can then be used as a short form in other type signatures/definitions and that accounts for all it's properties?

Upvotes: 2

Views: 168

Answers (1)

Tomas Petricek
Tomas Petricek

Reputation: 243041

The name used in the F# documentation for this kind of definition is type abbreviation and I think many people often refer to it as type alias.

The definition defines an alias or a shorter name for a longer type. It says that whenever you type Foo, the compiler will see it as int -> string.

  • Type abbreviations do not define a new type, which means that Foo and int -> string are equivalent (a value of one type is also a value of the other type). The important points are:

  • Type inference will generally infer the original type, so when you write a function that matches the type, compiler will infer it as int -> string unless you give an explicit type annotation

  • When compiled, the abbreviations are erased (because .NET does not have such concept) and so the compiled code will see int -> string.

Abbreviations are useful just for readability reasons - it lets you use more descriptive name for a type. However, they do not have many other implications.

Upvotes: 5

Related Questions