hw-prim-0.1.0.3: src/HaskellWorks/Data/Snoc.hs
{-# 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 #-}