在 F# 中,如何修复值类型为“a->'b->Model' 的模式匹配错误

In F#, how to fix a pattern match error with value type "a->'b->Model'

(我是 F# 新手)。我在 F# 中有以下定义:

init i j =
    { Id = Guid.NewGuid ()
      InnerRows = [0 .. 2] |> List.map (Cell.init i j) 
      SelectedInnerRow = None}

 let update msg m =
    match msg with
    | Select id -> { m with SelectedInnerRow = id }
    | Reset -> init

更新函数在“重置 -> 初始化”中显示以下错误: 模式匹配表达式的所有分支必须 return 与第一个分支具有相同类型的值,这里是 'Model'。此分支 returns 类型为 ''a 的值 -> 'b -> Model'

''a -> 'b -> Model' 是什么意思,如何解决?

谢谢。

TIA

如错误消息所述:模式匹配的所有分支必须 return 相同类型的值

您的 Select id -> ... 分支 return 是 Model

类型的值

您的 Result -> init 分支 return 是函数 init,其类型为 'a -> 'b -> Model - 也就是说,它采用某些类型的两个参数 'a 'b 和 return 一个 Model.

类型不匹配。不同种类。看到了吗?

从语义上,我猜测您真正想要 return 的update 函数是Model。如果是这样,你需要给 init 函数它的两个参数,这样它 return 就是你的 Model,这可以是 [=44] 的第二个分支的结果=]表达式:

| Result -> init 0 0

注意:在这种情况下,我实际上不确定 0 0 是正确的参数,我只是在猜测。如果不知道 Cell.init i j 做了什么以及它期望的参数类型,就无法知道它们应该是什么。

你必须弄清楚 init 这里需要的实际参数并将它们传入。