无法使用IdrisNet2创建简单的二进制数据结构

时间:2015-04-03 03:25:01

标签: idris

我正在尝试使用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中执行此操作或为什么这是必要的。

1 个答案:

答案 0 :(得分:3)

很抱歉。前段时间我们决定对所有类型及其构造函数的大写标准化;这意味着ohso已重命名为OhSo。所以有一个更新到这个lib来让它进行编译,但它看起来像oh在默认策略中解决隐式参数被忽略了: https://github.com/SimonJF/IdrisNet2/blob/master/src/IdrisNet/PacketLang.idr#L149 所以这种策略总是会失败(oh是一个未定义的引用)。您可以在那里明确传递p的值,这样就可以了:bits 16 {p = Oh}

但是我已经提交了一个拉取请求来修复lib中的问题:https://github.com/SimonJF/IdrisNet2/pull/11