代码之家  ›  专栏  ›  技术社区  ›  JeanJouX

如何为递归类型创建可存储实例?

  •  2
  • JeanJouX  · 技术社区  · 7 年前

    data MyType a =
            TypeDouble Double
          | TypeLst [a] 
          | TypeAdd (MyType a) (MyType a) 
    

    sizeOf 功能:

    instance Storable a => Storable (MyType a)  where
      sizeOf (TypeDouble _) = sizeOf (0 :: Double)
      sizeOf (TypeLst lst)  = sum $ map sizeOf lst
      sizeOf (TypeAdd a b)  = sizeOf a + sizeOf b
    

    peek poke 功能。我认为实现这些功能的方式与 this answer

    正确的实施方法是什么 窥视

    1 回复  |  直到 7 年前
        1
  •  7
  •   HTNW    7 年前

    你不能有一个 Storable struct s、 此外,请注意 sizeof sizeof (undefined::Int) . 也许看看 Foreign.Marshal.Array