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属于同一类型时,您只需要传递相同的函数两次.