得到错误:
error FS0193: Type constraint mismatch. The type
'Map<ContentAndYear,DemoMap>'
is not compatible with type
'seq<ContentAndYear * DemoMap>
问题代码:Demo
是发生错误的地方。
type Demo = Map<ContentAndYear,DemoMap>
type ContentAndYear = Content * Year
let demoMap =
dataMap
|> Seq.ofList
|> Seq.map(fun (content, data) ->
{ Content = content
Year = data.Year
Person = data.Person
NullContent = nullContent.[content].contentraw
PercentContent = nullContent.[content].contentraw
})
|> List.ofSeq
let demolist =
demoMap
|> List.map (fun x -> (x.Content,x.Year) |> ContentAndYear,x)
|> Map.ofList
let x = demolist |> Demo <---- Problem Line
如何解决?不确定。
答案 0 :(得分:5)
您的类型Demo
不是新类型,而是Map<ContentAndYear, DemoMap>
的别名,因此您的最后一行完全等效于此:
let x = demoList |> Map<ContentAndYear, DemoMap>
类型Map<_,_>
的构造函数采用seq<'key * 'value>
,但是您试图将Map<_,_>
传递给该构造函数,因此编译器自然会抱怨。
如何解决此问题取决于您的实际意思。
选项1 :如果您实际定义的是Demo
的定义,那么demoMap
的类型已经是Demo
,因此可以删除{{ 1}}:
|> Demo
选项2 :如果您打算按原样编译最后一行,则可能是想让let x = demoMap
是它自己的类型,而不是别名。也就是说,您的意思是要使用Demo
的构造函数:
Map<ContentAndYear, DemoMap>