hnetcdf-0.4.0.0: Data/NetCDF/Store.hs
{-# LANGUAGE ConstraintKinds, TypeFamilies #-}
-- | The /store polymorphism/ for the functions to get the values of
-- NetCDF variables relies on a simple `NcStore` typeclass for
-- converting between /store/ values and @ForeignPtr@s.
module Data.NetCDF.Store where
import Foreign.Storable
import Foreign.ForeignPtr
import GHC.Exts
-- | Class representing containers suitable for storing values read
-- from NetCDF variables. Just has methods to convert back and forth
-- between the store and a foreign pointer, and to perform simple
-- mapping over the store. The NcStoreExtraCon associated
-- constraint-kinded type is used to track extra class constraints on
-- elements needed for some store types.
class NcStore s where
type NcStoreExtraCon s a :: Constraint
type NcStoreExtraCon s a = ()
toForeignPtr :: (Storable e, NcStoreExtraCon s e) =>
s e -> ForeignPtr e
fromForeignPtr :: (Storable e, NcStoreExtraCon s e) =>
ForeignPtr e -> [Int] -> s e
smap :: (Storable a, Storable b, NcStoreExtraCon s a, NcStoreExtraCon s b) =>
(a -> b) -> s a -> s b