{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.Snoc ( Snoc(..) ) where import qualified Data.ByteString as BS import Data.Int import qualified Data.Vector as DV import qualified Data.Vector.Storable as DVS import Data.Word import HaskellWorks.Data.Seq class Seq v => Snoc v where vSnoc :: v -> Elem v -> v instance Snoc String where vSnoc v c = v ++ [c] {-# INLINE vSnoc #-} instance Snoc BS.ByteString where vSnoc = BS.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Word8) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Word16) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Word32) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Word64) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Word8) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Word16) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Word32) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Word64) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Int8) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Int16) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Int32) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DV.Vector Int64) where vSnoc = DV.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Int8) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Int16) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Int32) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Int64) where vSnoc = DVS.snoc {-# INLINE vSnoc #-} instance Snoc (DVS.Vector Int) where vSnoc = DVS.snoc {-# INLINE vSnoc #-}