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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/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#_Stdin - Fatal编程技术网

F# 类型推断错误

F# 类型推断错误,f#,stdin,F#,Stdin,我有两种类型: type Issue = { Id: string; Assigned_To: string; } type Journal = { JournalizedId: string; Id: string; UserId: string; } 我想创建一个函数,用于获取问题和Id的列表,并返回Id为的列表中第一个元素的已分配_to字段: let assignedToOfIssueById (id: string) (issues: Issue list): s

我有两种类型:

type Issue = {
  Id: string;
  Assigned_To: string;
}

type Journal = {
  JournalizedId: string;
  Id: string;
  UserId: string;
}
我想创建一个函数,用于获取问题和Id的列表,并返回Id为的列表中第一个元素的已分配_to字段:

let assignedToOfIssueById (id: string) (issues: Issue list): string =
  let issue = List.filter (fun i -> i.Id = id) issues |> List.head
  issue.Assigned_To
我犯了一个错误

    let issue = List.filter (fun i -> i.Id = id) issues |> List.head
  -----------------------------------------------^^^^^^

/Users/demas/stdin(14,48): error FS0001: Type mismatch. Expecting a
    Journal list    
but given a
    Issue list    
The type 'Journal' does not match the type 'Issue'
为什么以及如何修复它?

在表达式中:

List.filter (fun i -> i.Id = id) issues
fun
用法
i
推断为
Journal
(它是包含
Id
成员的最后一个类型声明)。你可以玩:

  • Journal.Id
    更改为
    Id2
    ,它就会工作
  • 更改
    日志
    问题
    的顺序。。。它会起作用的
  • 要修复此问题,请将此函数更改为(显式提供类型):

    或者更好(让
    filter
    从列表本身推断正确的类型):

    let assignedToOfIssueById2 (id : string) (issues : Issue list) : string =
      let issue = List.filter (fun (i : Issue) -> i.Id = id) issues |> List.head
      issue.Assigned_To
    
    let assignedToOfIssueById2 (id : string) (issues : Issue list) : string =
      let issue = issues |> List.filter (fun i -> i.Id = id) |> List.head
      issue.Assigned_To