在F#中,如何修复值类型为“ 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

其中更新功能在“重置->初始化”上显示以下错误 模式匹配表达式的所有分支必须返回与第一个分支(此处为“模型”)相同类型的值。该分支返回类型为'a->'b-> Model'

的值

“ a->'b->模型”是什么意思,如何解决

谢谢。

TIA

解决方法

错误消息指出:模式匹配的所有分支必须返回相同类型的值

您的Select id -> ...分支返回类型为Model的值

您的Result -> init分支返回函数init,其类型为'a -> 'b -> Model-也就是说,它接受某些类型为'a'b的两个参数,并且返回Model

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

从语义上讲,我猜想您真正想要返回的update函数是Model。如果是这样,则需要为init函数提供两个参数,以便它返回一个Model,这可以是模式匹配表达式的第二个分支的结果:

| Result -> init 0 0

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

您必须在这里找出实际的参数init并传递给他们。