小编has*_*mer的帖子

如何调试Haskell代码?

我有个问题.我写了一个很大的Haskell程序,它始终适用于小输入.现在,当我想测试它并生成更大的输入时,我总是收到消息:

HsProg: Prelude.head: empty list
Run Code Online (Sandbox Code Playgroud)

我用过Prelude.head很多次了.我该怎么做才能找到更多或获得更好的错误输出以获得它发生的代码行?

debugging haskell

39
推荐指数
2
解决办法
1万
查看次数

在Haskell中使用FFI进行联盟和类型**?

我需要知道如何用FFI解决联盟和类型**(例如int**)?我知道我需要一个可存储的结构实例,我也可以将其用于工会吗?

像这样的联盟:

typedef union {
     int i;
     char c;
} my_union;
Run Code Online (Sandbox Code Playgroud)

这通常在Haskell中表示为:

data MyUnion = I CInt | C CChar
Run Code Online (Sandbox Code Playgroud)

我的问题是你如何编组(定义一个可存储的实例)myUnion进入my_union?我的理解是,一个实例my_union将占用内存中的sizeof(int)字节,即它的最大成员的大小.所以为了存储这个,我们会写下以下内容:

instance Storable myUnion where
     size _ = #{size my_union} -- <-- hsc2hs shortcut
     alignment _ = alignment undefined::CInt -- <-- What should this really be?
     peek ptr = do -- <-- How are you supposed to know which element to extract?
     poke ptr (I i) =  poke ptr i -- <-- Or should this be #{poke my_union, i} ptr …
Run Code Online (Sandbox Code Playgroud)

haskell ffi discriminated-union

2
推荐指数
1
解决办法
617
查看次数

标签 统计

haskell ×2

debugging ×1

discriminated-union ×1

ffi ×1