Safe Haskell | None |
---|---|
Language | Haskell2010 |
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.
CommonMultiEdits | |
|
Instances
Functor CommonMultiEdits Source # | |
Defined in BytePatch.Pretty fmap :: (a -> b) -> CommonMultiEdits a -> CommonMultiEdits b (<$) :: a -> CommonMultiEdits b -> CommonMultiEdits a | |
Foldable CommonMultiEdits Source # | |
Defined in BytePatch.Pretty 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 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 (==) :: CommonMultiEdits a -> CommonMultiEdits a -> Bool (/=) :: CommonMultiEdits a -> CommonMultiEdits a -> Bool | |
Show a => Show (CommonMultiEdits a) Source # | |
Defined in BytePatch.Pretty showsPrec :: Int -> CommonMultiEdits a -> ShowS show :: CommonMultiEdits a -> String showList :: [CommonMultiEdits a] -> ShowS | |
Generic (CommonMultiEdits a) Source # | |
Defined in BytePatch.Pretty type Rep (CommonMultiEdits a) :: Type -> Type from :: CommonMultiEdits a -> Rep (CommonMultiEdits a) x to :: Rep (CommonMultiEdits a) x -> CommonMultiEdits a | |
FromJSON a => FromJSON (CommonMultiEdits a) | |
Defined in BytePatch.JSON parseJSON :: Value -> Parser (CommonMultiEdits a) parseJSONList :: Value -> Parser [CommonMultiEdits a] | |
ToJSON a => ToJSON (CommonMultiEdits a) | |
Defined in BytePatch.JSON 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.
MultiEdit | |
|
Instances
Functor (MultiEdit s) Source # | |
Foldable (MultiEdit s) Source # | |
Defined in BytePatch.Pretty 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 parseJSON :: Value -> Parser (MultiEdit s a) parseJSONList :: Value -> Parser [MultiEdit s a] | |
(ToJSON (SeekRep s), ToJSON a) => ToJSON (MultiEdit s a) | |
Defined in BytePatch.JSON 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.
EditOffset | |
|
Instances
Functor (EditOffset s) Source # | |
Defined in BytePatch.Pretty fmap :: (a -> b) -> EditOffset s a -> EditOffset s b (<$) :: a -> EditOffset s b -> EditOffset s a | |
Foldable (EditOffset s) Source # | |
Defined in BytePatch.Pretty 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 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 (==) :: 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 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 type Rep (EditOffset s a) :: Type -> Type 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 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 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 #