我不明白F#中的价值限制是如何运作的.我已经阅读了wiki中的解释以及MSDN文档.我不明白的是:
例如,为什么这给了我一个价值限制错误(取自这个问题):
let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
Run Code Online (Sandbox Code Playgroud)
但这不是:
let toleq e (a:float<_>) b = (abs ( a - b ) ) < e
Run Code Online (Sandbox Code Playgroud)这一点可以概括......
let is_bigger a b = a < b
Run Code Online (Sandbox Code Playgroud)
但这不是(它被指定为int):
let add a b = a + b
Run Code Online (Sandbox Code Playgroud)为什么带隐式参数的函数会生成值限制:
这个:
let item_count = List.fold (fun acc _ -> 1 + acc) 0
Run Code Online (Sandbox Code Playgroud)
对此:
let item_count l = List.fold (fun acc _ …Run Code Online (Sandbox Code Playgroud)在 F# 交互式 shell 中dotnet fsi,我尝试flip像 Haskell 中那样测试函数,
flip :: (a -> b -> c) -> b -> a -> c
> let flip = fun f -> fun a -> fun b -> f(b)(a);;
val flip: f: ('a -> 'b -> 'c) -> a: 'b -> b: 'a -> 'c
Run Code Online (Sandbox Code Playgroud)
然后,研究内置管道运算符,
> (|>);;
val it: ('a -> ('a -> 'b) -> 'b)
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。
现在,
> flip (|>);;
flip (|>);;
^^^^^^^^^
/..... : error FS0030: Value …Run Code Online (Sandbox Code Playgroud)