如何用F#中的复合键子句写这个C#join?:
join k in DataContext.Catalogs on
new { id = o.IDENT, v = o.VZ } equals
new { id = k.IDENT, v = k.VZ }
Run Code Online (Sandbox Code Playgroud)
这是类似的问题: 在F#3.0查询中 由多列组合,仍然没有得到答案.但我无法相信在FSharp中编写它并不容易.
谢谢
这是一个参考问题:StackOverflow在延续monad中
与我玩了一点,需要一些澄清.
1)我想这个:
member this.Delay(mk) = fun c -> mk () c
Run Code Online (Sandbox Code Playgroud)
使得计算工作流程中的行为能够实现这些差异,如toyvo所示:
cBind (map xs) (fun xs -> cReturn (f x :: xs))
cBind (fun c -> map xs c) (fun xs -> cReturn (f x :: xs))
Run Code Online (Sandbox Code Playgroud)
所以我并不完全明白什么是诀窍,什么时候
(fun c -> map xs c)只有不同的符号(map xs)
2)推理问题.- 在OP的第二个映射示例中,我发现它由于推理问题而无法编译v,因为它推断f为a -> b list而不是期望的a -> b.为什么以这种方式推断?如果let v = f x它会很好地推断.
3)在我看来,VS在工具提示中显示不准确的类型签名:monad的返回类型返回为:('e->'f)->f,而Bind的返回类型仅为'c->'b.- 它似乎('e->'f)只c …