F# Can';不能让bind操作符使用受歧视的并集
我试图在代码中使用“绑定运算符”(>>=) 如果我使用操作符,我会得到一个编译错误,如果我改为“内联”操作符应该做的事情,它会工作F# Can';不能让bind操作符使用受歧视的并集,f#,operators,F#,Operators,我试图在代码中使用“绑定运算符”(>>=) 如果我使用操作符,我会得到一个编译错误,如果我改为“内联”操作符应该做的事情,它会工作 类型TestDI= 私有的 |一组字符串列表 |整型列表的B 具有 静态成员(>>=)(x:string列表,f:TestDI->'a)= f“a” |B->“B” //应为支持运算符“>>=”的类型,但给定了函数类型。 //您可能缺少函数的参数。 [“a”]>>=func //工作 func使用运算符时,F#按顺序查找: 作为让定义的运算符 作为静态成员——在两
类型TestDI=
私有的
|一组字符串列表
|整型列表的B
具有
静态成员(>>=)(x:string列表,f:TestDI->'a)=
f“a”
|B->“B”
//应为支持运算符“>>=”的类型,但给定了函数类型。
//您可能缺少函数的参数。
[“a”]>>=func
//工作
func使用运算符时,F#按顺序查找:
- 作为
让定义的运算符李>
- 作为
静态成员
——在两个参数类型之一上定义的运算符。这里,您传递给操作符的参数是string list
和TestDI->string
,因此它不会查看您在TestDI
上定义的参数
因此,这里的解决方案是让
定义它:
type TestDI =
private
| A of string list
| B of int list
let (>>=) (x: string list) (f: TestDI -> 'a) =
f <| A x
类型TestDI=
私有的
|一组字符串列表
|整型列表的B
let(>>=)(x:string列表)(f:TestDI->'a)=
F