F# 任何与Haskell';除<;|以外的新加坡元?

F# 任何与Haskell';除<;|以外的新加坡元?,f#,F#,我知道有一个后管道(Seq.filter^%(>)2 |>Seq.map^%fun x->x.ToString() //与此相比,它不会编译(即使编译了也很难理解) 让东西= [1;2;3] |>顺序过滤器)2 |>Seq.map x.ToString() Haskell有一些功能,比如使用反勾号的可选内插和节,这些功能在F#中是不可用的。这使得某些构造更加冗长 通常,我只需编写一个函数管道,如下所示: let stuff = [1;2;3] |> Seq.filter (fun

我知道有一个后管道
(Seq.filter^%(>)2
|>Seq.map^%fun x->x.ToString()
//与此相比,它不会编译(即使编译了也很难理解)
让东西=
[1;2;3]
|>顺序过滤器)2
|>Seq.map x.ToString()

Haskell有一些功能,比如使用反勾号的可选内插和节,这些功能在F#中是不可用的。这使得某些构造更加冗长

通常,我只需编写一个函数管道,如下所示:

let stuff = 
  [1;2;3]
  |> Seq.filter (fun x -> x < 2)
  |> Seq.map string

如果您让代码的读者对代码的功能产生疑问,那么您只会降低每个人的工作效率。使用
Seq.filter(fun x->x<2)
可能看起来更详细,但对读者来说是明确的。

可能重复Nope。关于Haskell,我没有足够的知识来回答,但是看看@GuyCoder并搜索答案,这与Haskell或模拟类型类有什么关系?顺便说一句:我想你想在Haskell中找到类似于
$
的东西,但对于F#er来说,你的两个建议似乎都不如简单地使用
(…)
(就像
Seq.filter((>)2)
-最后一个简单的
Seq.map string
;)讽刺的是,我最初在键入示例时将其写成
fun x->x<2
,然后想“不,有人要指出如何缩短它”。关于
^%
链的任何想法。也就是说,你可以做
Gen.elements[4..8]|>Arb.fromGen |>Prop.forAll^%fun neighborCount->。
@DaxFohl,看起来确实很诱人:)然而,大多数F#er(包括我在内)在引入新操作符时都相当保守。代码的读者将需要查找它以了解新操作员的工作,因此操作员的利益应该远远大于理解它的成本。
let stuff = 
  [1;2;3]
  |> Seq.filter (fun x -> x < 2)
  |> Seq.map string
> let inline (^%) f = f;;

val inline ( ^% ) : f:'a -> 'a

> let stuff = 
  [1;2;3]
  |> Seq.filter ^% (>) 2
  |> Seq.map ^% fun x -> x.ToString()
  |> Seq.toList;;

val stuff : string list = ["1"]