binrep-0.8.0: Encode precise binary representations directly in types
Safe HaskellSafe-Inferred
LanguageGHC2021

Binrep.Type.Thin

Description

Thin types which reference the parser input when gotten via Get.

flatparse's take family perform no copying-- instead, a bytestring is manually constructed with the finalizer from the input bytestring. I'm not sure I want this -- it sounds like a memory leak waiting to happen -- so I default to copying to a new bytestring. This type allows recovering the efficient no-copy behaviour.

TODO doing this the other way around would be simpler, and fit flatparse better. All we need is such a class:

class Copy a where copy :: a -> a
instance Copy B.ByteString where copy = B.copy

But this just doesn't fly, because it would invert the behaviour.

Documentation

newtype Thin a Source #

Constructors

Thin 

Fields

Instances

Instances details
Data a => Data (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Thin a -> c (Thin a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Thin a) #

toConstr :: Thin a -> Constr #

dataTypeOf :: Thin a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Thin a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Thin a)) #

gmapT :: (forall b. Data b => b -> b) -> Thin a -> Thin a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Thin a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Thin a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Thin a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Thin a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Thin a -> m (Thin a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Thin a -> m (Thin a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Thin a -> m (Thin a) #

IsString a => IsString (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

fromString :: String -> Thin a #

Monoid a => Monoid (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

mempty :: Thin a #

mappend :: Thin a -> Thin a -> Thin a #

mconcat :: [Thin a] -> Thin a #

Semigroup a => Semigroup (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

(<>) :: Thin a -> Thin a -> Thin a #

sconcat :: NonEmpty (Thin a) -> Thin a #

stimes :: Integral b => b -> Thin a -> Thin a #

Generic (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Associated Types

type Rep (Thin a) :: Type -> Type #

Methods

from :: Thin a -> Rep (Thin a) x #

to :: Rep (Thin a) x -> Thin a #

IsList a => IsList (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Associated Types

type Item (Thin a) #

Methods

fromList :: [Item (Thin a)] -> Thin a #

fromListN :: Int -> [Item (Thin a)] -> Thin a #

toList :: Thin a -> [Item (Thin a)] #

Read a => Read (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Show a => Show (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

showsPrec :: Int -> Thin a -> ShowS #

show :: Thin a -> String #

showList :: [Thin a] -> ShowS #

BLen a => BLen (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

blen :: Thin a -> Int Source #

Get (Thin ByteString) Source # 
Instance details

Defined in Binrep.Type.Thin

Put a => Put (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

put :: Thin a -> Putter Source #

GetSize (Thin ByteString) Source # 
Instance details

Defined in Binrep.Type.Prefix.Size

NFData a => NFData (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

rnf :: Thin a -> () #

Eq a => Eq (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

(==) :: Thin a -> Thin a -> Bool #

(/=) :: Thin a -> Thin a -> Bool #

Ord a => Ord (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

compare :: Thin a -> Thin a -> Ordering #

(<) :: Thin a -> Thin a -> Bool #

(<=) :: Thin a -> Thin a -> Bool #

(>) :: Thin a -> Thin a -> Bool #

(>=) :: Thin a -> Thin a -> Bool #

max :: Thin a -> Thin a -> Thin a #

min :: Thin a -> Thin a -> Thin a #

Strengthen (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Methods

strengthen :: Weak (Thin a) -> Result (Thin a) #

Weaken (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

Associated Types

type Weak (Thin a) #

Methods

weaken :: Thin a -> Weak (Thin a) #

type Rep (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

type Rep (Thin a) = D1 ('MetaData "Thin" "Binrep.Type.Thin" "binrep-0.8.0-inplace" 'True) (C1 ('MetaCons "Thin" 'PrefixI 'True) (S1 ('MetaSel ('Just "unThin") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))
type Item (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

type Item (Thin a) = Item a
type Weak (Thin a) Source # 
Instance details

Defined in Binrep.Type.Thin

type Weak (Thin a) = Weak (Identity a)