{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.Container ( Container(..) ) where import Data.Int import Data.Word import qualified Data.ByteString as BS import qualified Data.Vector as DV import qualified Data.Vector.Storable as DVS class Container a where type Elem a instance Container [a] where type Elem [a] = a instance Container BS.ByteString where type Elem BS.ByteString = Word8 instance Container (DV.Vector Word8) where type Elem (DV.Vector Word8) = Word8 instance Container (DV.Vector Word16) where type Elem (DV.Vector Word16) = Word16 instance Container (DV.Vector Word32) where type Elem (DV.Vector Word32) = Word32 instance Container (DV.Vector Word64) where type Elem (DV.Vector Word64) = Word64 instance Container (DVS.Vector Word8) where type Elem (DVS.Vector Word8) = Word8 instance Container (DVS.Vector Word16) where type Elem (DVS.Vector Word16) = Word16 instance Container (DVS.Vector Word32) where type Elem (DVS.Vector Word32) = Word32 instance Container (DVS.Vector Word64) where type Elem (DVS.Vector Word64) = Word64 instance Container (DV.Vector Int8) where type Elem (DV.Vector Int8) = Int8 instance Container (DV.Vector Int16) where type Elem (DV.Vector Int16) = Int16 instance Container (DV.Vector Int32) where type Elem (DV.Vector Int32) = Int32 instance Container (DV.Vector Int64) where type Elem (DV.Vector Int64) = Int64 instance Container (DVS.Vector Int8) where type Elem (DVS.Vector Int8) = Int8 instance Container (DVS.Vector Int16) where type Elem (DVS.Vector Int16) = Int16 instance Container (DVS.Vector Int32) where type Elem (DVS.Vector Int32) = Int32 instance Container (DVS.Vector Int64) where type Elem (DVS.Vector Int64) = Int64 instance Container (DVS.Vector Int) where type Elem (DVS.Vector Int) = Int