bytepatch-0.2.1: Patch byte-representable data in a bytestream.
Safe HaskellNone
LanguageHaskell2010

BytePatch.Pretty

Description

Convenience interface to enable defining edits at offsets with some optional safety checks.

Redefines some types to enable us to easily leverage Aeson's generic JSON schema deriving. That sadly means we can't use some of the interesting offset plumbing.

TODO I should definitely bite the bullet and use the plumbing now that it's so cool.

Synopsis

Core types

data CommonMultiEdits a Source #

A list of MultiEdits with some common configuration.

Constructors

CommonMultiEdits 

Fields

  • cmesBaseOffset :: Maybe (SeekRep 'CursorSeek)

    The base offset from which all offsets are located. An actual offset is calculated by adding the base offset to an offset. Actual offsets below 0 are invalid, meaning for an offset o with base offset bo, the actual offset is only valid when o >= bo. Negative base offsets are allowed.

  • cmesEdits :: [MultiEdit 'CursorSeek a]
     

Instances

Instances details
Functor CommonMultiEdits Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fmap :: (a -> b) -> CommonMultiEdits a -> CommonMultiEdits b

(<$) :: a -> CommonMultiEdits b -> CommonMultiEdits a

Foldable CommonMultiEdits Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fold :: Monoid m => CommonMultiEdits m -> m

foldMap :: Monoid m => (a -> m) -> CommonMultiEdits a -> m

foldMap' :: Monoid m => (a -> m) -> CommonMultiEdits a -> m

foldr :: (a -> b -> b) -> b -> CommonMultiEdits a -> b

foldr' :: (a -> b -> b) -> b -> CommonMultiEdits a -> b

foldl :: (b -> a -> b) -> b -> CommonMultiEdits a -> b

foldl' :: (b -> a -> b) -> b -> CommonMultiEdits a -> b

foldr1 :: (a -> a -> a) -> CommonMultiEdits a -> a

foldl1 :: (a -> a -> a) -> CommonMultiEdits a -> a

toList :: CommonMultiEdits a -> [a]

null :: CommonMultiEdits a -> Bool

length :: CommonMultiEdits a -> Int

elem :: Eq a => a -> CommonMultiEdits a -> Bool

maximum :: Ord a => CommonMultiEdits a -> a

minimum :: Ord a => CommonMultiEdits a -> a

sum :: Num a => CommonMultiEdits a -> a

product :: Num a => CommonMultiEdits a -> a

Traversable CommonMultiEdits Source # 
Instance details

Defined in BytePatch.Pretty

Methods

traverse :: Applicative f => (a -> f b) -> CommonMultiEdits a -> f (CommonMultiEdits b)

sequenceA :: Applicative f => CommonMultiEdits (f a) -> f (CommonMultiEdits a)

mapM :: Monad m => (a -> m b) -> CommonMultiEdits a -> m (CommonMultiEdits b)

sequence :: Monad m => CommonMultiEdits (m a) -> m (CommonMultiEdits a)

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

Defined in BytePatch.Pretty

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

Defined in BytePatch.Pretty

Methods

showsPrec :: Int -> CommonMultiEdits a -> ShowS

show :: CommonMultiEdits a -> String

showList :: [CommonMultiEdits a] -> ShowS

Generic (CommonMultiEdits a) Source # 
Instance details

Defined in BytePatch.Pretty

Associated Types

type Rep (CommonMultiEdits a) :: Type -> Type

Methods

from :: CommonMultiEdits a -> Rep (CommonMultiEdits a) x

to :: Rep (CommonMultiEdits a) x -> CommonMultiEdits a

FromJSON a => FromJSON (CommonMultiEdits a) 
Instance details

Defined in BytePatch.JSON

Methods

parseJSON :: Value -> Parser (CommonMultiEdits a)

parseJSONList :: Value -> Parser [CommonMultiEdits a]

ToJSON a => ToJSON (CommonMultiEdits a) 
Instance details

Defined in BytePatch.JSON

Methods

toJSON :: CommonMultiEdits a -> Value

toEncoding :: CommonMultiEdits a -> Encoding

toJSONList :: [CommonMultiEdits a] -> Value

toEncodingList :: [CommonMultiEdits a] -> Encoding

type Rep (CommonMultiEdits a) Source # 
Instance details

Defined in BytePatch.Pretty

type Rep (CommonMultiEdits a) = D1 ('MetaData "CommonMultiEdits" "BytePatch.Pretty" "bytepatch-0.2.1-inplace" 'False) (C1 ('MetaCons "CommonMultiEdits" 'PrefixI 'True) (S1 ('MetaSel ('Just "cmesBaseOffset") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (SeekRep 'CursorSeek))) :*: S1 ('MetaSel ('Just "cmesEdits") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [MultiEdit 'CursorSeek a])))

data MultiEdit (s :: SeekKind) a Source #

A single edit to be applied at a list of offsets.

Constructors

MultiEdit 

Fields

Instances

Instances details
Functor (MultiEdit s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fmap :: (a -> b) -> MultiEdit s a -> MultiEdit s b

(<$) :: a -> MultiEdit s b -> MultiEdit s a

Foldable (MultiEdit s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fold :: Monoid m => MultiEdit s m -> m

foldMap :: Monoid m => (a -> m) -> MultiEdit s a -> m

foldMap' :: Monoid m => (a -> m) -> MultiEdit s a -> m

foldr :: (a -> b -> b) -> b -> MultiEdit s a -> b

foldr' :: (a -> b -> b) -> b -> MultiEdit s a -> b

foldl :: (b -> a -> b) -> b -> MultiEdit s a -> b

foldl' :: (b -> a -> b) -> b -> MultiEdit s a -> b

foldr1 :: (a -> a -> a) -> MultiEdit s a -> a

foldl1 :: (a -> a -> a) -> MultiEdit s a -> a

toList :: MultiEdit s a -> [a]

null :: MultiEdit s a -> Bool

length :: MultiEdit s a -> Int

elem :: Eq a => a -> MultiEdit s a -> Bool

maximum :: Ord a => MultiEdit s a -> a

minimum :: Ord a => MultiEdit s a -> a

sum :: Num a => MultiEdit s a -> a

product :: Num a => MultiEdit s a -> a

Traversable (MultiEdit s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

traverse :: Applicative f => (a -> f b) -> MultiEdit s a -> f (MultiEdit s b)

sequenceA :: Applicative f => MultiEdit s (f a) -> f (MultiEdit s a)

mapM :: Monad m => (a -> m b) -> MultiEdit s a -> m (MultiEdit s b)

sequence :: Monad m => MultiEdit s (m a) -> m (MultiEdit s a)

(Eq (SeekRep s), Eq a) => Eq (MultiEdit s a) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

(==) :: MultiEdit s a -> MultiEdit s a -> Bool

(/=) :: MultiEdit s a -> MultiEdit s a -> Bool

(Show (SeekRep s), Show a) => Show (MultiEdit s a) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

showsPrec :: Int -> MultiEdit s a -> ShowS

show :: MultiEdit s a -> String

showList :: [MultiEdit s a] -> ShowS

Generic (MultiEdit s a) Source # 
Instance details

Defined in BytePatch.Pretty

Associated Types

type Rep (MultiEdit s a) :: Type -> Type

Methods

from :: MultiEdit s a -> Rep (MultiEdit s a) x

to :: Rep (MultiEdit s a) x -> MultiEdit s a

(FromJSON (SeekRep s), FromJSON a) => FromJSON (MultiEdit s a) 
Instance details

Defined in BytePatch.JSON

Methods

parseJSON :: Value -> Parser (MultiEdit s a)

parseJSONList :: Value -> Parser [MultiEdit s a]

(ToJSON (SeekRep s), ToJSON a) => ToJSON (MultiEdit s a) 
Instance details

Defined in BytePatch.JSON

Methods

toJSON :: MultiEdit s a -> Value

toEncoding :: MultiEdit s a -> Encoding

toJSONList :: [MultiEdit s a] -> Value

toEncodingList :: [MultiEdit s a] -> Encoding

type Rep (MultiEdit s a) Source # 
Instance details

Defined in BytePatch.Pretty

type Rep (MultiEdit s a) = D1 ('MetaData "MultiEdit" "BytePatch.Pretty" "bytepatch-0.2.1-inplace" 'False) (C1 ('MetaCons "MultiEdit" 'PrefixI 'True) (S1 ('MetaSel ('Just "meData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "meAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [EditOffset s a])))

data EditOffset (s :: SeekKind) a Source #

An edit offset, with metadata to use for preparing and applying the edit.

Constructors

EditOffset 

Fields

Instances

Instances details
Functor (EditOffset s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fmap :: (a -> b) -> EditOffset s a -> EditOffset s b

(<$) :: a -> EditOffset s b -> EditOffset s a

Foldable (EditOffset s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

fold :: Monoid m => EditOffset s m -> m

foldMap :: Monoid m => (a -> m) -> EditOffset s a -> m

foldMap' :: Monoid m => (a -> m) -> EditOffset s a -> m

foldr :: (a -> b -> b) -> b -> EditOffset s a -> b

foldr' :: (a -> b -> b) -> b -> EditOffset s a -> b

foldl :: (b -> a -> b) -> b -> EditOffset s a -> b

foldl' :: (b -> a -> b) -> b -> EditOffset s a -> b

foldr1 :: (a -> a -> a) -> EditOffset s a -> a

foldl1 :: (a -> a -> a) -> EditOffset s a -> a

toList :: EditOffset s a -> [a]

null :: EditOffset s a -> Bool

length :: EditOffset s a -> Int

elem :: Eq a => a -> EditOffset s a -> Bool

maximum :: Ord a => EditOffset s a -> a

minimum :: Ord a => EditOffset s a -> a

sum :: Num a => EditOffset s a -> a

product :: Num a => EditOffset s a -> a

Traversable (EditOffset s) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

traverse :: Applicative f => (a -> f b) -> EditOffset s a -> f (EditOffset s b)

sequenceA :: Applicative f => EditOffset s (f a) -> f (EditOffset s a)

mapM :: Monad m => (a -> m b) -> EditOffset s a -> m (EditOffset s b)

sequence :: Monad m => EditOffset s (m a) -> m (EditOffset s a)

(Eq (SeekRep s), Eq a) => Eq (EditOffset s a) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

(==) :: EditOffset s a -> EditOffset s a -> Bool

(/=) :: EditOffset s a -> EditOffset s a -> Bool

(Show (SeekRep s), Show a) => Show (EditOffset s a) Source # 
Instance details

Defined in BytePatch.Pretty

Methods

showsPrec :: Int -> EditOffset s a -> ShowS

show :: EditOffset s a -> String

showList :: [EditOffset s a] -> ShowS

Generic (EditOffset s a) Source # 
Instance details

Defined in BytePatch.Pretty

Associated Types

type Rep (EditOffset s a) :: Type -> Type

Methods

from :: EditOffset s a -> Rep (EditOffset s a) x

to :: Rep (EditOffset s a) x -> EditOffset s a

(FromJSON (SeekRep s), FromJSON a) => FromJSON (EditOffset s a) 
Instance details

Defined in BytePatch.JSON

Methods

parseJSON :: Value -> Parser (EditOffset s a)

parseJSONList :: Value -> Parser [EditOffset s a]

(ToJSON (SeekRep s), ToJSON a) => ToJSON (EditOffset s a) 
Instance details

Defined in BytePatch.JSON

Methods

toJSON :: EditOffset s a -> Value

toEncoding :: EditOffset s a -> Encoding

toJSONList :: [EditOffset s a] -> Value

toEncodingList :: [EditOffset s a] -> Encoding

type Rep (EditOffset s a) Source # 
Instance details

Defined in BytePatch.Pretty

type Rep (EditOffset s a) = D1 ('MetaData "EditOffset" "BytePatch.Pretty" "bytepatch-0.2.1-inplace" 'False) (C1 ('MetaCons "EditOffset" 'PrefixI 'True) ((S1 ('MetaSel ('Just "eoOffset") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SeekRep s)) :*: S1 ('MetaSel ('Just "eoAbsOffset") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (SeekRep 'AbsSeek)))) :*: (S1 ('MetaSel ('Just "eoMaxLength") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Natural)) :*: S1 ('MetaSel ('Just "eoEditMeta") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (EditMeta a))))))

Convenience functions

normalizeSimple :: PatchRep a => [CommonMultiEdits a] -> Maybe [Patch 'AbsSeek Bytes] Source #

Normalize a list of CommonMultiEditss, discarding everything on error.

Low-level interface

listAlgebraConcatEtc :: [(a, [(b, [c])])] -> ([b], [(c, a)]) Source #

normalize :: PatchRep a => [MultiEdit 'AbsSeek a] -> Maybe [Patch 'AbsSeek Bytes] Source #