Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#型推断_F#_Type Inference - Fatal编程技术网

F#型推断

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真的,所以我将其重命名)现在您有

我正在使用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
真的,所以我将其重命名)现在您有:

'a -> bool ~ 'b list -> 'b
您可以将其统一起来,并看到:

  • 'b~bool
    (从
    ->
    的右侧)
  • 'a~'b列表~bool列表
    (从左侧)
但这一切加在一起,你就会得到F#的类型推断给你的答案:

'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