相关疑难解决方法(0)

通用高阶函数

当我将其作为本地值传递但不作为参数传递时,我是否可以使用具有不同类型参数的泛型函数?例如:

let f = id

let g (x,y) = (f x, f y)

g ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

工作正常,但如果我尝试将函数作为参数传递

let g f (x,y) = (f x, f y)

g id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

它失败,因为它采用版本f <int>并尝试将其应用两次.

我找到了一个解决方法,但它迫使我写两次我正在传递的函数:

let g f1 f2 (x,y) = (f1 x, f2 y)

g id id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

这是我第二次遇到这个问题.

为什么它以这种方式运行,如果函数是本地值或者它作为参数传递,它不应该是相同的?

有没有办法在不重复功能的情况下执行此操作?

一个黑客,可能使用显式类型约束,内联魔术,引用?

generics f# inline

6
推荐指数
2
解决办法
1259
查看次数

是否有可能在F#中使以下示例完全多态?

type Mul = Mul with member inline __.Op(a: ^a,b: ^a) = a*b
type Div = Div with member inline __.Op(a: ^a,b: ^a) = a/b
type Add = Add with member inline __.Op(a: ^a,b: ^a) = a+b
type Sub = Sub with member inline __.Op(a: ^a,b: ^a) = a-b

let inline op x a b =
    (^a: (member Op: ^b * ^b -> ^b) x,a,b)

let inline tup2 a b c d = op Mul a b, op Mul c d …
Run Code Online (Sandbox Code Playgroud)

f#

4
推荐指数
1
解决办法
108
查看次数

标签 统计

f# ×2

generics ×1

inline ×1