{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE FlexibleContexts   #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}

module HaskellWorks.Data.Dsv.Strict.Cursor.Type
  ( DsvCursor(..)
  ) where

import Control.DeepSeq
import Data.Word
import GHC.Generics
import HaskellWorks.Data.Container

data DsvCursor t s = DsvCursor
  { DsvCursor t s -> Elem t
dsvCursorDelimiter :: Elem t
  , DsvCursor t s -> t
dsvCursorText      :: !t
  , DsvCursor t s -> s
dsvCursorMarkers   :: !s
  , DsvCursor t s -> s
dsvCursorNewlines  :: !s
  , DsvCursor t s -> Word64
dsvCursorPosition  :: !Word64
  }
  deriving (forall x. DsvCursor t s -> Rep (DsvCursor t s) x)
-> (forall x. Rep (DsvCursor t s) x -> DsvCursor t s)
-> Generic (DsvCursor t s)
forall x. Rep (DsvCursor t s) x -> DsvCursor t s
forall x. DsvCursor t s -> Rep (DsvCursor t s) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall t s x. Rep (DsvCursor t s) x -> DsvCursor t s
forall t s x. DsvCursor t s -> Rep (DsvCursor t s) x
$cto :: forall t s x. Rep (DsvCursor t s) x -> DsvCursor t s
$cfrom :: forall t s x. DsvCursor t s -> Rep (DsvCursor t s) x
Generic

deriving instance (Eq   (Elem t), Eq   t, Eq   s) => Eq   (DsvCursor t s)
deriving instance (Show (Elem t), Show t, Show s) => Show (DsvCursor t s)

instance (NFData t, NFData (Elem t), NFData s) => NFData (DsvCursor t s)