F#型推断
我正在使用fsharp类型的推断,我试图了解它们是如何工作的。为什么会这样F#型推断,f#,type-inference,F#,Type Inference,我正在使用fsharp类型的推断,我试图了解它们是如何工作的。为什么会这样 List.filter List.head 类型是否为bool list list->bool list?list.filter具有该类型(只需在FSI中输入list.filter;;): 因此,它需要一个'a->bool并产生一个'a list->'一个list 现在你给它喂食 > List.head;; val it : ('b list -> 'b) (这是另一个'a真的,所以我将其重命名)现在您有
List.filter List.head
类型是否为
bool list list->bool list
?list.filter
具有该类型(只需在FSI中输入list.filter;;
):
因此,它需要一个'a->bool
并产生一个'a list->'一个list
现在你给它喂食
> List.head;;
val it : ('b list -> 'b)
(这是另一个'a
真的,所以我将其重命名)现在您有:
'a -> bool ~ 'b list -> 'b
您可以将其统一起来,并看到:
(从'b~bool
的右侧)->
(从左侧)'a~'b列表~bool列表
'a list -> 'a list
~ ('b list) list -> ('b list) list
~ (bool list) list -> (bool list) list
~ bool list list -> bool list list
你希望它有什么类型?很抱歉,我仍然无法理解,~是什么意思?没问题(应该提到它)-它应该表示类型相等-这是Haskell的事情,你不想再写另一个
=
。。。因此,对于这里的类型,只需将其读为=
(例如:'a->bool
应该等于'b list->'b
,因为我插入了列表。head
进入列表。filter
-现在函数类型是相等的,如果左手边和右手边是一样的-因此我得到:'a
等于b list
,bool
等于'b
)
'a list -> 'a list
~ ('b list) list -> ('b list) list
~ (bool list) list -> (bool list) list
~ bool list list -> bool list list