Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有c2hs或其他工具的情况下为该结构创建可存储实例?_C_Haskell_Ffi - Fatal编程技术网

如何在没有c2hs或其他工具的情况下为该结构创建可存储实例?

如何在没有c2hs或其他工具的情况下为该结构创建可存储实例?,c,haskell,ffi,C,Haskell,Ffi,这一结构: typedef struct Atom_ { float x; float y; float z; int col; } Atom; 对应于此类型: data Atom = Atom { pos :: V3 Float, col :: Int } 如何为Atom创建一个可存储实例,以便在Haskell上将Atoms发送给一个需要Atom的C函数?我目前不能保证它完全按照所示工作(我没有在这台计算机上设置环境),但这应该是正确的第一步: 导入外部。可

这一结构:

typedef struct Atom_ {
    float x;
    float y;
    float z;
    int col;
} Atom;
对应于此类型:

data Atom = Atom { pos :: V3 Float, col :: Int }

如何为
Atom
创建一个可存储实例,以便在Haskell上将
Atom
s发送给一个需要
Atom
的C函数?

我目前不能保证它完全按照所示工作(我没有在这台计算机上设置环境),但这应该是正确的第一步:

导入外部。可存储
进口外国货
实例可存储原子,其中
--不要将此设置为静态,让编译器根据需要进行选择
--在站台上
sizeOf=3*sizeOf(0::Float)+sizeOf(0::Int)
--您可能需要处理这个,以及相应的C
--编码如果您有能力,对齐可能会很棘手,但是
--在这种情况下,您可以非常安全地假设它将是对齐
--对于`浮动`
对齐u=对齐(0::浮点)
--这些都很简单,很明显,这里的顺序问题
--很多。很明显,我没有把它做得最优化
--可能是,我要的是代码的清晰性
peek ptr=do
让floatSize=sizeOf(0::Float)
x