Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- data CommonMultiEdits a = CommonMultiEdits {
- cmesBaseOffset :: Maybe (SeekRep 'CursorSeek)
- cmesEdits :: [MultiEdit 'CursorSeek a]
- data MultiEdit (s :: SeekKind) a = MultiEdit {
- meData :: a
- meAt :: [EditOffset s a]
- data EditOffset (s :: SeekKind) a = EditOffset {
- eoOffset :: SeekRep s
- eoAbsOffset :: Maybe (SeekRep 'AbsSeek)
- eoMaxLength :: Maybe Natural
- eoEditMeta :: Maybe (EditMeta a)
- normalizeSimple :: PatchRep a => [CommonMultiEdits a] -> Maybe [Patch 'AbsSeek Bytes]
- applyBaseOffset :: CommonMultiEdits a -> (Integer, [(MultiEdit 'AbsSeek a, [EditOffset 'CursorSeek a])])
- listAlgebraConcatEtc :: [(a, [(b, [c])])] -> ([b], [(c, a)])
- normalize :: PatchRep a => [MultiEdit 'AbsSeek a] -> Maybe [Patch 'AbsSeek Bytes]
Core types
data CommonMultiEdits a Source #
A list of MultiEdit
s with some common configuration.
Constructors
CommonMultiEdits | |
Fields
|
Instances
Functor CommonMultiEdits Source # | |
Defined in BytePatch.Pretty Methods fmap :: (a -> b) -> CommonMultiEdits a -> CommonMultiEdits b (<$) :: a -> CommonMultiEdits b -> CommonMultiEdits a | |
Foldable CommonMultiEdits Source # | |
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 # | |
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 # | |
Defined in BytePatch.Pretty Methods (==) :: CommonMultiEdits a -> CommonMultiEdits a -> Bool (/=) :: CommonMultiEdits a -> CommonMultiEdits a -> Bool | |
Show a => Show (CommonMultiEdits a) Source # | |
Defined in BytePatch.Pretty Methods showsPrec :: Int -> CommonMultiEdits a -> ShowS show :: CommonMultiEdits a -> String showList :: [CommonMultiEdits a] -> ShowS | |
Generic (CommonMultiEdits a) Source # | |
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) | |
Defined in BytePatch.JSON Methods parseJSON :: Value -> Parser (CommonMultiEdits a) parseJSONList :: Value -> Parser [CommonMultiEdits a] | |
ToJSON a => ToJSON (CommonMultiEdits a) | |
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 # | |
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
Functor (MultiEdit s) Source # | |
Foldable (MultiEdit s) Source # | |
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] 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 | |
Traversable (MultiEdit s) Source # | |
Defined in BytePatch.Pretty | |
(Eq (SeekRep s), Eq a) => Eq (MultiEdit s a) Source # | |
(Show (SeekRep s), Show a) => Show (MultiEdit s a) Source # | |
Generic (MultiEdit s a) Source # | |
(FromJSON (SeekRep s), FromJSON a) => FromJSON (MultiEdit s a) | |
Defined in BytePatch.JSON | |
(ToJSON (SeekRep s), ToJSON a) => ToJSON (MultiEdit s a) | |
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 # | |
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
Functor (EditOffset s) Source # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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) | |
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) | |
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 # | |
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 CommonMultiEdits
s, discarding everything on error.
Low-level interface
applyBaseOffset :: CommonMultiEdits a -> (Integer, [(MultiEdit 'AbsSeek a, [EditOffset 'CursorSeek a])]) Source #
listAlgebraConcatEtc :: [(a, [(b, [c])])] -> ([b], [(c, a)]) Source #