无法使用 IdrisNet2 创建简单的二进制数据结构
Can't create simple binary data structure with IdrisNet2
我正在尝试使用 IdrisNet2 库来定义一些二进制数据结构。我正在使用 Idris 0.9.17.1 并提交 IdrisNet2 的 262b746c9a2405e43d1de6a48de44cac2fd19932。我正在定义一个包含一个 16 位字段的数据包:
module Main
import IdrisNet.PacketLang
import Data.So
myPacket : PacketLang
myPacket = with PacketLang do
bits 16
main : IO ()
main = putStrLn "hello"
我收到编译器错误:
Can't solve goal
So (fromInteger 16 > fromInteger 0)
到底是什么问题,我该如何解决?我猜我需要向编译器证明 16 大于 0,但我不确定如何在 Idris 中执行此操作或为什么这是必要的。
很抱歉。不久前,我们决定将所有类型及其构造函数的大写标准化;这意味着 oh
和 so
重命名为 Oh
和 So
。因此,对该库进行了更新以使其能够编译,但在解决隐式参数的默认策略中似乎 oh
被忽略了:
https://github.com/SimonJF/IdrisNet2/blob/master/src/IdrisNet/PacketLang.idr#L149
所以这个策略总是会失败(oh
是一个未定义的引用)。您可以在那里显式传递 p
的值,这样就可以了:bits 16 {p = Oh}
.
但是我已经提交了一个 pull request 来解决库中的这个问题:https://github.com/SimonJF/IdrisNet2/pull/11
我正在尝试使用 IdrisNet2 库来定义一些二进制数据结构。我正在使用 Idris 0.9.17.1 并提交 IdrisNet2 的 262b746c9a2405e43d1de6a48de44cac2fd19932。我正在定义一个包含一个 16 位字段的数据包:
module Main
import IdrisNet.PacketLang
import Data.So
myPacket : PacketLang
myPacket = with PacketLang do
bits 16
main : IO ()
main = putStrLn "hello"
我收到编译器错误:
Can't solve goal
So (fromInteger 16 > fromInteger 0)
到底是什么问题,我该如何解决?我猜我需要向编译器证明 16 大于 0,但我不确定如何在 Idris 中执行此操作或为什么这是必要的。
很抱歉。不久前,我们决定将所有类型及其构造函数的大写标准化;这意味着 oh
和 so
重命名为 Oh
和 So
。因此,对该库进行了更新以使其能够编译,但在解决隐式参数的默认策略中似乎 oh
被忽略了:
https://github.com/SimonJF/IdrisNet2/blob/master/src/IdrisNet/PacketLang.idr#L149
所以这个策略总是会失败(oh
是一个未定义的引用)。您可以在那里显式传递 p
的值,这样就可以了:bits 16 {p = Oh}
.
但是我已经提交了一个 pull request 来解决库中的这个问题:https://github.com/SimonJF/IdrisNet2/pull/11