F# 类型的组合。如何实例化和使用。

Nic*_*ick 5 .net f# types type-conversion

我可以创建并实例化这样的简单类型:

type MyStr1 = MyStr1 of string
let myStr1 = MyStr1("aaa")

type MyStr2 = MyStr2 of string
let myStr2 = MyStr2("bbb")
Run Code Online (Sandbox Code Playgroud)

然后我可以将它们组合成第三种类型:

type MyStr3 = MyStr1 -> MyStr2
Run Code Online (Sandbox Code Playgroud)

如何实例化MyStr3?这个对象代表什么?它是做什么用的?

Sze*_*zer 6

type alias适用于函数类型:

type MyStr3 = MyStr1 -> MyStr2
Run Code Online (Sandbox Code Playgroud)

严格来说,这不是一种类型,只是您知道的别名:)

但您可以使用它来创建此别名的值:

let myFun : MyStr3 =
    fun (MyStr1 str) -> MyStr2 str

let result = myFun myStr1
printfn "%A" result //prints `MyStr2 "aaa"`
Run Code Online (Sandbox Code Playgroud)

添加:回答您的评论:

type MyStr4 = MyStr4 of string

type MyStr3 = MyStr1 -> MyStr2 -> MyStr4

let myFun : MyStr3 = 
    fun (MyStr1 str1) (MyStr2 str2) -> MyStr4 (str1 + str2)
Run Code Online (Sandbox Code Playgroud)