我的Elmish.WPF应用程序结合了 Elmish.WPF Sample项目‘NewWindow’ + ‘NewWindow.Core’我将其添加到 ‘FileDialogsCmdMsg’ 的副本中+ ‘FileDialogsCmdMsg.Core’ .
FileDialogsCmdMsg
是这项工作的基础,它提供了后台处理功能,我将向其中添加“NewWindow”弹出窗口功能。
当调用 WpfProgram.mkProgramWithCmdMsg
时,我陷入两 (2) 个类型冲突...
...更新
和绑定(bind)
调用时出错。
编译器报告该行有以下错误(请参见上面的红色下划线)...
...说 WpfProgram.mkProgramWithCmdMsg
需要一个 unit -> Model
但给出了一个 Model
其中 update
和 bindings
在更大的类型规范中调用。
但这里是调用函数的类型信息,WpfProgram.mkProgramWithCmdMsg
接受这些参数...
...抱歉太大了。
如您所见,“update”和“bindings”都生成 WpfProgram.mdProgramWithCmdMsg
所需的 Model
参数类型。 然而,我们期望有一个unit->Model
,而提供的Model
却存在类型冲突;为什么?
这里是有关更新
类型冲突的更多详细信息...
...看看这里如何声明 unit->Model
是预期的,而之前您看到 update
应该预期 Model
? 为什么?
您会在与“绑定(bind)”的类型冲突的详细信息中看到相同的问题...
..再次显示传递正确的 Model` 类型参数时预期的 unit-Model'。
这里定义了update
的类型信息...
...这是绑定(bind)
类型信息...
问题:当接收函数 WpfProgram.mkProgramWithCmdMsg
和两个参数 update 时,为什么会报告“
和 unit->Model
”预期错误bindings
都分别提供 Model
参数?
请询问是否需要更多详细信息才能查明真相。
感谢您的帮助!
最佳答案
我怀疑问题出在你的 init
上函数,(我猜)是 unit -> Model
类型的函数。如果这是真的,则 lambda fun _ -> init, []
绑定(bind)具体类型unit -> Model
到'model
类型变量。结果,update
和bindings
还期望相同的具体类型,从而导致您看到错误消息。
如果我是对的,你有两个选择:
- 更改
init
所以它是Model
类型的值,而不是函数。 - 更改
init
所以它也返回一个空的消息列表,然后传递init
直接联系mkProgramWithCmdMsg
,而不是传递 lambda。
请注意,当您将鼠标悬停在 mkProgramWithCmdMsg
上时,编译器会显示 'model
确实绑定(bind)到unit -> Model
,大概是由于init
类型不匹配:
关于f# - Elmish.WPF类型冲突: unit -> Model expected where Model provided?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74133772/