我想编写一个函数,它接受几个元组作为参数,并用元素选择它们并传递给另一个函数,其中 i 作为另一个参数给出。我已经尝试过这样的事情:
let function (tup1:'A*'A) (tup2:'B*'B) i =
otherFunction (i tup1) (i tup2)
function Tup1 Tup2 fst
我有一个错误,因为i
预计是'A*'A ->'A
not 'B*'B->'B
。
有什么办法可以让这段代码工作吗?
提前致谢。
你基本上想传递一个类型的参数∀'a.'a*'a->'a
,但在 F#(和其他 ML)中,仅1 级多态性 https://en.wikipedia.org/wiki/Parametric_polymorphism#Higher-ranked_polymorphism受支持,因此您不能直接执行此操作。解决方法是使用通用方法定义一个新类型来模拟更高级别的多态性:
type Untupler =
abstract Apply : 'a*'a -> 'a
let myFunction tup1 tup2 (i:Untupler) =
otherFunction (i.Apply tup1) (i.Apply tup2)
myFunction Tup1 Tup2 { new Untupler with member __.Apply (x,y) = x }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)