F# 类型推断
F# type inferencing
我正在使用 fsharp 类型推断,我正在尝试了解它们的工作原理。为什么会这样
List.filter List.head
类型是 bool list list -> bool list list
?
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
我正在使用 fsharp 类型推断,我正在尝试了解它们的工作原理。为什么会这样
List.filter List.head
类型是 bool list list -> bool list list
?
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