gpt4 book ai didi

f# - 函数作为参数的类型推断

转载 作者:行者123 更新时间:2023-12-04 18:04:46 25 4
gpt4 key购买 nike

我想编写一个函数,它接受几个元组作为参数并选择它们的第 i 个元素并传递给另一个函数,其中 i 作为另一个参数给出。我试过这样的:

let function (tup1:'A*'A) (tup2:'B*'B) i =
otherFunction (i tup1) (i tup2)
function Tup1 Tup2 fst

我有一个错误,因为 i预计为 'A*'A ->'A不是 'B*'B->'B .
有什么办法可以使这段代码工作吗?

提前致谢。

最佳答案

你基本上想传递一个 ∀'a.'a*'a->'a 类型的参数,但在 F#(和其他 ML)中,只有 rank-1 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 }

关于f# - 函数作为参数的类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com