当前位置 : 主页 > 手机开发 > 其它 >

约束泛型类型以继承f#中的泛型类型

来源:互联网 收集:自由互联 发布时间:2021-06-19
let mapTuple f (a,b) = (f a, f b) 我正在尝试创建一个函数,将函数f应用于元组中的两个项,并将结果作为元组返回. F#类型推断说mapTuple返回一个’b *’b元组.它还假设a和b属于同一类型. 我希望能
let mapTuple f (a,b) = (f a, f b)

我正在尝试创建一个函数,将函数f应用于元组中的两个项,并将结果作为元组返回. F#类型推断说mapTuple返回一个’b *’b元组.它还假设a和b属于同一类型.

我希望能够传递两种不同的类型作为参数.您会认为这不起作用,因为它们都必须作为参数传递给f.所以我认为如果它们从相同的基类继承,它可能会起作用.

对于我想要实现的目标,这是一个不太通用的函数.

let mapTuple (f:Map<_,_> -> Map<'a,'b>) (a:Map<int,double>,b:Map<double, int>) = (f a, f b)

但是,它会出现类型不匹配错误.

我该怎么做?我想在F#中实现什么?

有明确说明的风险,一个足够好的解决方案可能是有一个mapTuple,它接受两个函数而不是一个:

let mapTuple fa fb (a, b) = (fa a, fb b)

如果您的原始f是通用的,将其作为fa和fb传递将为您提供具有您正在寻找的类型的函数的两个具体实例.在最坏的情况下,当a和b属于同一类型时,您只需要传递相同的函数两次.

网友评论