我正在使用fsharp类型推理,我正在尝试理解它们是如何工作的.为什么会这样
List.filter List.head
Run Code Online (Sandbox Code Playgroud)
是类型bool list list -> bool list list?
Car*_*ten 10
List.filter有类型(只需输入List.filter;;FSI):
> List.filter;;
val it : (('a -> bool) -> 'a list -> 'a list)
Run Code Online (Sandbox Code Playgroud)
所以它需要一个'a -> bool并导致一个'a list -> 'a list
现在你用它喂它
> List.head;;
val it : ('b list -> 'b)
Run Code Online (Sandbox Code Playgroud)
(这是另一个'a真的所以我重命名了)现在你有:
'a -> bool ~ 'b list -> 'b
Run Code Online (Sandbox Code Playgroud)
你可以统一这个并看到:
'b ~ bool(从右侧->)'a ~ 'b list ~ bool list (从左侧)但这一切都在一起,你得到答案F#的类型推断给你:
'a list -> 'a list
~ ('b list) list -> ('b list) list
~ (bool list) list -> (bool list) list
~ bool list list -> bool list list
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |