gpt4 book ai didi

f# - 如何使用 Elmish Debugger 解决编码器问题?

转载 作者:行者123 更新时间:2023-12-04 10:11:10 25 4
gpt4 key购买 nike

我有一个使用 websockets 在 SAFE-Stack 中构建的应用程序,或多或少地遵循以下方法:https://github.com/CompositionalIT/safe-sockets

它工作正常,但 Elmish 调试器不喜欢此示例中的 WsSender 类型:


type ConnectionState =
| DisconnectedFromServer
| ConnectedToServer of WsSender
| Connecting

member this.IsConnected =
match this with
| ConnectedToServer _ -> true
| DisconnectedFromServer | Connecting -> false

and WsSender = Msg -> Unit


在浏览器控制台中给出以下错误消息:

ElmishDebuggerMessage

谁能告诉我如何解决这个问题? (假设它是可修复的并且我已经正确诊断了问题。)谢谢。

最佳答案

您看到此错误是因为 Elmish.Debugger 使用 Thoth.Json 将您的 Msg/Model 序列化为 JSON 格式。

型号WsSender不能以 JSON 格式表示,因为它是一个函数。所以 Thoth.Json 要求你解释它应该如何编码这种类型。

您可以通过创建所谓的 extraCoder 来做到这一点。像那样:

在您的情况下,您将不得不“只是”创建一个假的编码器/解码器,以使调试器满意。

module CustomEncoders =

let wsSenderEncoder (_ : WsSender) = Encode.string "WsSender function"

let wsSenderDecoder = Decode.fail "Decoding is not supported for WsSender type"

let myExtraCoders =
Extra.empty
|> Extra.withCustom wsSenderEncoder wsSenderDecoder


let modelEncoder = Encode.Auto.generateEncoder(extra = myExtraCoders)
let modelDecoder = Decode.Auto.generateDecoder(extra = myExtraCoders)

在您的程序创建中,您应该替换 Program.withDebugger来自 Program.withDebuggerCoders并给它你创建的编码器和解码器。
Program.withDebuggerCoders CustomEncoders.modelEncoder CustomEncoders.modelDecoder

关于f# - 如何使用 Elmish Debugger 解决编码器问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com