指向Haskell中的ADT

Jon*_*her 5 haskell pointers ffi

我想在Haskell中实现术语图,这样我就可以实现一个使用共享的术语重写引擎.就像是

data TG f v = Var v | Op f [TG f v] | P (Ptr (TG f v))
Run Code Online (Sandbox Code Playgroud)

而且我希望以下内容有意义:

let
    t' = Op 'f' [Var 'x', Var 'y']
    t = getPointer t'
in
    Op 'g' [P t,P t]
Run Code Online (Sandbox Code Playgroud)

然后在重写期间,我只需要重写一次.

但是,我注意到两件事:(1)模块被称为Foreign.Storable,因此它应该只用于FFI的东西,(2)对于像列表这样的任何类型都没有Foreign.Storable的实例; 为什么是这样?