我是不是很傻?有些东西在 monad/computation 表达式中看起来更好,我有很多使用 seq 计算表达式的代码,但是每次我点击一个选项<>我都必须恢复到“Option.map”等。
有点刺耳(当我在 C# 中执行此操作时,我为 IMaybe<> 类型编写了一个 linq 运算符,这一切看起来都很好且一致)。
我可以,但不是特别想写一个,肯定有一个(或多个),人们使用哪一个?
IE
所以而不是
let postCodeMaybe =
personMaybe
|> Option.bind (fun p -> p.AddressMaybe())
|> Option.map (fun -> p.Postcode())
我们可以去
let postCodeMaybe =
option {
for p in personMaybe do
for a in p.AddressMaybe() do
a.Postcode()
}
我对前一个代码没有任何问题,除了在我的上下文中它存在于许多看起来像后者的“seq”计算表达式中(并且一些将查看此代码的开发人员将来自 C#/LINQ 背景,基本上是后者)。