如何使这个F#代码更紧凑

Lay*_*lez 3 f# pipe composition

我想从:

let a = fun x ->
        x
        |> f
        |> g
Run Code Online (Sandbox Code Playgroud)

这样的事情:

let a = |> f
        |> g
Run Code Online (Sandbox Code Playgroud)

我试过了:

let a = (<|)  f 
              |> g
Run Code Online (Sandbox Code Playgroud)

和类似的

小智 7

let a = fun x -> x |> f |> g
Run Code Online (Sandbox Code Playgroud)

相当于

let a x = x |> f |> g
Run Code Online (Sandbox Code Playgroud)

看起来你想组成两个函数fg创建一个新函数a.您可以使用>>运算符来组合函数.你可以写:

let a = f >> g
Run Code Online (Sandbox Code Playgroud)

如果f并且g是通用函数,那么由于F#值限制,它将无法编译.在这种情况下,您需要添加类型注释:

let a<'a> : ('a -> 'a) = f >> g
Run Code Online (Sandbox Code Playgroud)