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