    {-# LANGUAGE MultiParamTypeClasses      #-}

    module Basement.Alg.Class
        ( Indexable, index
        , RandomAccess, read, write
        ) where

    import           Basement.Types.OffsetSize

    class Indexable container ty where
        index :: container -> (Offset ty) -> ty

    class RandomAccess container prim ty where
        read  :: container -> (Offset ty)       -> prim ty
        write :: container -> (Offset ty) -> ty -> prim ()