联合类型中的单例联合类型

时间:2015-11-30 02:41:58

标签: f#

我有以下联合类型:

type UserName = UserName of string

type LogLineType =
| UserName of UserName
| EmptyLine

和一个返回LogLineType的函数:

let getLogLineType line =
    let userName = UserName "foo"
    userName

但是,我一直收到编译错误

  

表达式应该具有UserName类型但具有类型字符串

我理解它正在尝试从LogLineType类型构造UserName但是如何告诉编译器我正在尝试从UserName构建string(单案联盟)?

2 个答案:

答案 0 :(得分:2)

目前尚不清楚您希望UserName函数返回哪个getLogLineType,但函数的名称表示后者(LogLineType的情况)。< / p>

在这种情况下,您首先需要将字符串转换为第一个UserName大小写,然后将值转换为第二个UserName大小写。为了做到这一点,你需要消除歧义:

let getLogLineType line =
    let userName = UserName (UserName.UserName "foo")
    userName

此函数的类型为'a -> LogLineType

正如@ildjarn在评论中所说的那样,有两个同名的工会案件正在寻找麻烦。

答案 1 :(得分:1)

您可以使用UserName.UserName "foo"

解决此问题
let getLogLineType line =
    let userName = UserName.UserName "foo"
    userName;;

但正如@ildjarn在评论中已经说过的那样,将同名案件联合起来可能并不明智。