@hackage derive-storable0.1.2.0
Derive Storable instances with GHC.Generics.
Installation
Tested Compilers
Dependencies (1)
Dependents (15)
@hackage/llama-cpp-hs, @hackage/keid-core, @hackage/glpk-headers, @hackage/hs-tango, @hackage/keid-ui-dearimgui, @hackage/derive-storable-plugin, Show all…
Introduction
The derive-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))
Note on performance
There are some problems with performance of derived Storable instances. For now there exists a solution in form of GHC Core plugin - derive-storable-plugin.
Usage
Here's an example:
{-# 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