【发布时间】:2020-07-02 02:50:31
【问题描述】:
问题的标题提出了核心问题。这是为什么我需要这样的东西的背景。
我正在通过 Websocket 处理 JSON-RPC 接口。这意味着请求-响应周期是完全异步的。当我发出一个请求时,我给它一个唯一的 ID,异步响应包含该 ID(以帮助将请求-响应联系在一起)。
现在,我需要使用 Aeson 将响应 JSON 解析为 Haskell 对象。无论我采用哪种方式构建它,我都需要在代码中的某个位置具有以下类型签名的函数:
rpcId2HaskellType :: String -> a
a 并不是所有的类型,而是一组我期望响应的少数已知类型。
我能想到的一个解决方案是创建一个代数数据类型并将其用作rpcId2HaskellType 的返回类型
data UnnecessaryAlgebraicDataType = ResponseType1 | ResponseType1 | ResponseType3
rpcId2HaskellType :: String -> UnnecessaryAlgebraicDataType
但是,我不相信这是最好的方法。有没有其他方法可以做到这一点?
【问题讨论】: