错误FS0193:类型约束不匹配

时间:2018-06-22 02:37:06

标签: f#

得到错误:

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

如何解决?不确定。

1 个答案:

答案 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>
相关问题