{-# OPTIONS_GHC-funbox-strict-fields #-} module HaskellWorks.Data.Excess.MinExcess ( MinExcess(..) ) where import Control.Applicative (pure) import Foreign.Ptr (castPtr) import Foreign.Storable (Storable (..)) data MinExcess = MinExcess { minExcessMin :: !Int , minExcessAll :: !Int } deriving (Eq, Show) instance Storable MinExcess where sizeOf _ = sizeOf (0 :: Int) * 3 alignment _ = alignment (0 :: Int) peek p = do let q = castPtr p a <- peek q b <- peekElemOff q 1 pure (MinExcess a b) poke p t = do let q = castPtr p poke q (minExcessMin t) pokeElemOff q 1 (minExcessAll t)