我有以下联合类型:
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
(单案联盟)?
答案 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在评论中已经说过的那样,将同名案件联合起来可能并不明智。