f# - Elmish.WPF类型冲突: unit -> Model expected where Model provided?

标签 f# elmish-wpf

我的Elmish.WPF应用程序结合了 Elmish.WPF Sample项目‘NewWindow’ + ‘NewWindow.Core’我将其添加到 ‘FileDialogsCmdMsg’ 的副本中+ ‘FileDialogsCmdMsg.Core’ .

FileDialogsCmdMsg 是这项工作的基础,它提供了后台处理功能,我将向其中添加“NewWindow”弹出窗口功能。

当调用 WpfProgram.mkProgramWithCmdMsg 时,我陷入两 (2) 个类型冲突...

wpfprogram-called-showing-errors

...更新绑定(bind)调用时出错。

编译器报告该行有以下错误(请参见上面的红色下划线)...

type-error-messages

...说 WpfProgram.mkProgramWithCmdMsg 需要一个 unit -> Model 但给出了一个 Model 其中 updatebindings 在更大的类型规范中调用。

但这里是调用函​​数的类型信息,WpfProgram.mkProgramWithCmdMsg 接受这些参数...

wpfprogram-extected-type-information

...抱歉太大了。

如您所见,“update”和“bindings”都生成 WpfProgram.mdProgramWithCmdMsg 所需的 Model 参数类型。 然而,我们期望有一个unit->Model,而提供的Model却存在类型冲突;为什么?

这里是有关更新类型冲突的更多详细信息...

update-type-conflict

...看看这里如何声明 unit->Model 是预期的,而之前您看到 update 应该预期 Model 为什么?

您会在与“绑定(bind)”的类型冲突的详细信息中看到相同的问题...

bindings-type-conflict

..再次显示传递正确的 Model` 类型参数时预期的 unit-Model'。

这里定义了update的类型信息...

update-type-information

...这是绑定(bind)类型信息...

bindings-type-information

问题:当接收函数 WpfProgram.mkProgramWithCmdMsg 和两个参数 update 时,为什么会报告“unit->Model”预期错误bindings 都分别提供 Model 参数?

请询问是否需要更多详细信息才能查明真相。

感谢您的帮助!

最佳答案

我怀疑问题出在你的 init 上函数,(我猜)是 unit -> Model 类型的函数。如果这是真的,则 lambda fun _ -> init, []绑定(bind)具体类型unit -> Model'model类型变量。结果,updatebindings还期望相同的具体类型,从而导致您看到错误消息。

如果我是对的,你有两个选择:

  • 更改init所以它是 Model 类型的值,而不是函数。
  • 更改init所以它也返回一个空的消息列表,然后传递init直接联系mkProgramWithCmdMsg ,而不是传递 lambda。

请注意,当您将鼠标悬停在 mkProgramWithCmdMsg 上时,编译器会显示 'model确实绑定(bind)到unit -> Model ,大概是由于init类型不匹配:

enter image description here

关于f# - Elmish.WPF类型冲突: unit -> Model expected where Model provided?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74133772/

相关文章:

F# 输出参数和值类型

F# 运算符重载之谜

f# - 如何在 F# 中获取异步任务的结果

recursion - 创建递归可区分联合值

f# - 强制执行显式类型参数

f# - 使用 Elmish.WPF (F#) 管理 WPF 选项卡控件?

f# - Elmish.WPF 中子模型到父模型/主模型的消息传递是如何完成的?

f# - LiveCharts LabelFormatter 的 Elmish.Wpf 绑定(bind)