{-# 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 ()