# Introduction The `generic-storable` package allows you to automatically generate Storable instances for your datatypes. It uses GHC.Generics, which allows the coders to derive certain instances automatically. To derive a (G)Storable instance, the data-type has to: * have only one constructor. * all fields of the constructor need to be GStorable. * implement a Generic instance (`derive (Generic)`) In order to achieve the same performance as for hand-written instances, take a look at [generic-storable-plugin](https://www.github.com/mkloczko/generic-storable-plugin). # Usage Here's an example: ```haskell {-# LANGUAGE DeriveGeneric #-} import Foreign.Storable import Foreign.Storable.Generic import Foreign.Ptr import Foreign.Marshal.Alloc import Generics.Deriving data Position = Position { x :: Double, y :: Double } deriving (Show,Read, Generic) instance GStorable Position updatePosition :: Ptr Position -> Position -> IO () updatePosition ptr pos = poke ptr pos main = do let val = Position 0.0 10.0 ptr <- malloc :: IO (Ptr Position) putStrLn "Created a ptr with value of" putStrLn =<< show <$> peek ptr updatePosition ptr val putStrLn "And now the value of ptr is:" putStrLn =<< show <$> peek ptr ```