F#类型推理

时间:2015-09-29 04:28:28

标签: f# type-inference

我正在使用fsharp类型推理,我正在尝试了解它们的工作原理。为什么呢

List.filter List.head

bool list list -> bool list list的类型?

1 个答案:

答案 0 :(得分:10)

List.filter具有类型(只需在FSI中输入List.filter;;):

> List.filter;;
val it : (('a -> bool) -> 'a list -> 'a list)

所以它需要'a -> bool并产生'a list -> 'a list

现在你用

喂它
> List.head;;
val it : ('b list -> 'b)

(这是另一个'a,所以我重新命名了它,现在你有了:

'a -> bool ~ 'b list -> 'b

你可以统一这一点并看到:

  • '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