{-# OPTIONS_GHC -fplugin Foreign.Storable.Generic.Plugin #-}
{-# OPTIONS_GHC -fplugin-opt=Foreign.Storable.Generic.Plugin:-crash #-}
module Instances where
import Types
import Foreign.Storable.Generic
instance GStorable Flat where
gsizeOf _ = 16
galignment _ = 8
gpeekByteOff ptr offset = Flat
<$> gpeekByteOff ptr offset
<*> gpeekByteOff ptr (offset+8)
gpokeByteOff ptr offset (Flat a b) =
gpokeByteOff ptr offset a
>> gpokeByteOff ptr (offset+8) b
instance GStorable Nested where
gsizeOf _ = 16
galignment _ = 8
gpeekByteOff ptr offset = Nested <$> (Flat
<$> gpeekByteOff ptr offset
<*> gpeekByteOff ptr (offset+8))
gpokeByteOff ptr offset (Nested (Flat a b)) =
gpokeByteOff ptr offset a
>> gpokeByteOff ptr (offset+8) b
instance GStorable Nested2 where
gsizeOf _ = 16
galignment _ = 8
gpeekByteOff ptr offset = Nested2 <$> (Nested <$> (Flat
<$> gpeekByteOff ptr offset
<*> gpeekByteOff ptr (offset+8)))
gpokeByteOff ptr offset (Nested2 (Nested (Flat a b))) =
gpokeByteOff ptr offset a
>> gpokeByteOff ptr (offset+8) b