module ProAbstract.Structure.BlockTag
( BlockTag (..), blockTag
) where
import ProAbstract.Annotation
import ProAbstract.Content
import ProAbstract.Metadata
import ProAbstract.Structure.Block
import ProAbstract.Structure.BlockTagContent
import ProAbstract.Structure.CanBePlain
import ProAbstract.Structure.CanFork
import ProAbstract.Structure.Fork
import ProAbstract.Structure.HasManyParagraphs
import ProAbstract.Structure.HasManyPlainBlocks
import ProAbstract.Structure.HasManyPlainInlines
import ProAbstract.Structure.Plain
import ProAbstract.Structure.PlainBlock
import ProAbstract.Tag
data BlockTag ann =
BlockTagFork (Tagged (Blocks ann))
| BlockTagPlain (Tagged (PlainBlock ann))
deriving stock (BlockTag ann -> BlockTag ann -> Bool
(BlockTag ann -> BlockTag ann -> Bool)
-> (BlockTag ann -> BlockTag ann -> Bool) -> Eq (BlockTag ann)
forall ann. Eq ann => BlockTag ann -> BlockTag ann -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BlockTag ann -> BlockTag ann -> Bool
$c/= :: forall ann. Eq ann => BlockTag ann -> BlockTag ann -> Bool
== :: BlockTag ann -> BlockTag ann -> Bool
$c== :: forall ann. Eq ann => BlockTag ann -> BlockTag ann -> Bool
Eq, Int -> BlockTag ann -> ShowS
[BlockTag ann] -> ShowS
BlockTag ann -> String
(Int -> BlockTag ann -> ShowS)
-> (BlockTag ann -> String)
-> ([BlockTag ann] -> ShowS)
-> Show (BlockTag ann)
forall ann. Show ann => Int -> BlockTag ann -> ShowS
forall ann. Show ann => [BlockTag ann] -> ShowS
forall ann. Show ann => BlockTag ann -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlockTag ann] -> ShowS
$cshowList :: forall ann. Show ann => [BlockTag ann] -> ShowS
show :: BlockTag ann -> String
$cshow :: forall ann. Show ann => BlockTag ann -> String
showsPrec :: Int -> BlockTag ann -> ShowS
$cshowsPrec :: forall ann. Show ann => Int -> BlockTag ann -> ShowS
Show, (forall x. BlockTag ann -> Rep (BlockTag ann) x)
-> (forall x. Rep (BlockTag ann) x -> BlockTag ann)
-> Generic (BlockTag ann)
forall x. Rep (BlockTag ann) x -> BlockTag ann
forall x. BlockTag ann -> Rep (BlockTag ann) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ann x. Rep (BlockTag ann) x -> BlockTag ann
forall ann x. BlockTag ann -> Rep (BlockTag ann) x
$cto :: forall ann x. Rep (BlockTag ann) x -> BlockTag ann
$cfrom :: forall ann x. BlockTag ann -> Rep (BlockTag ann) x
Generic)
deriving anyclass (Eq (BlockTag ann)
Eq (BlockTag ann)
-> (Int -> BlockTag ann -> Int)
-> (BlockTag ann -> Int)
-> Hashable (BlockTag ann)
Int -> BlockTag ann -> Int
BlockTag ann -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
forall ann. Hashable ann => Eq (BlockTag ann)
forall ann. Hashable ann => Int -> BlockTag ann -> Int
forall ann. Hashable ann => BlockTag ann -> Int
hash :: BlockTag ann -> Int
$chash :: forall ann. Hashable ann => BlockTag ann -> Int
hashWithSalt :: Int -> BlockTag ann -> Int
$chashWithSalt :: forall ann. Hashable ann => Int -> BlockTag ann -> Int
$cp1Hashable :: forall ann. Hashable ann => Eq (BlockTag ann)
Hashable, BlockTag ann -> ()
(BlockTag ann -> ()) -> NFData (BlockTag ann)
forall ann. NFData ann => BlockTag ann -> ()
forall a. (a -> ()) -> NFData a
rnf :: BlockTag ann -> ()
$crnf :: forall ann. NFData ann => BlockTag ann -> ()
NFData)
type instance Content (BlockTag ann) = BlockTagContent ann
type instance Annotation (BlockTag ann) = ann
type instance Plain (BlockTag ann) = Tagged (PlainBlock ann)
type instance Fork (BlockTag ann) = Tagged (Blocks ann)
instance HasContent (BlockTag ann) (BlockTag ann) where
content :: Lens
(BlockTag ann)
(BlockTag ann)
(Content (BlockTag ann))
(Content (BlockTag ann))
content = (BlockTag ann -> BlockTagContent ann)
-> (BlockTag ann -> BlockTagContent ann -> BlockTag ann)
-> Lens
(BlockTag ann)
(BlockTag ann)
(BlockTagContent ann)
(BlockTagContent ann)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens BlockTag ann -> BlockTagContent ann
forall ann. BlockTag ann -> BlockTagContent ann
f BlockTag ann -> BlockTagContent ann -> BlockTag ann
forall s.
(Is (TagOpticKind s) A_Getter, HasTag s) =>
s -> BlockTagContent (Annotation s) -> BlockTag (Annotation s)
g
where
f :: BlockTag ann -> BlockTagContent ann
f = \case
BlockTagFork Tagged (Blocks ann)
x -> Blocks ann -> BlockTagContent ann
forall ann. Blocks ann -> BlockTagContent ann
BlockTagContent_Fork (Blocks ann -> BlockTagContent ann)
-> Blocks ann -> BlockTagContent ann
forall a b. (a -> b) -> a -> b
$ Optic' A_Lens NoIx (Tagged (Blocks ann)) (Blocks ann)
-> Tagged (Blocks ann) -> Blocks ann
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (Blocks ann)) (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Tagged (Blocks ann)
x
BlockTagPlain Tagged (PlainBlock ann)
x -> PlainBlock ann -> BlockTagContent ann
forall ann. PlainBlock ann -> BlockTagContent ann
BlockTagContent_Plain (PlainBlock ann -> BlockTagContent ann)
-> PlainBlock ann -> BlockTagContent ann
forall a b. (a -> b) -> a -> b
$ Optic' A_Lens NoIx (Tagged (PlainBlock ann)) (PlainBlock ann)
-> Tagged (PlainBlock ann) -> PlainBlock ann
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (PlainBlock ann)) (PlainBlock ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Tagged (PlainBlock ann)
x
g :: s -> BlockTagContent (Annotation s) -> BlockTag (Annotation s)
g s
x = \case
BlockTagContent_Fork Blocks (Annotation s)
c -> Tagged (Blocks (Annotation s)) -> BlockTag (Annotation s)
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork (Tagged (Blocks (Annotation s)) -> BlockTag (Annotation s))
-> Tagged (Blocks (Annotation s)) -> BlockTag (Annotation s)
forall a b. (a -> b) -> a -> b
$ Tag (Annotation s)
-> Blocks (Annotation s) -> Tagged (Blocks (Annotation s))
forall ann. Tag ann -> Blocks ann -> Tagged (Blocks ann)
TaggedBlocks Tag (Annotation s)
t Blocks (Annotation s)
c
BlockTagContent_Plain PlainBlock (Annotation s)
c -> Tagged (PlainBlock (Annotation s)) -> BlockTag (Annotation s)
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain (Tagged (PlainBlock (Annotation s)) -> BlockTag (Annotation s))
-> Tagged (PlainBlock (Annotation s)) -> BlockTag (Annotation s)
forall a b. (a -> b) -> a -> b
$ Tag (Annotation s)
-> PlainBlock (Annotation s) -> Tagged (PlainBlock (Annotation s))
forall ann. Tag ann -> PlainBlock ann -> Tagged (PlainBlock ann)
TaggedPlainBlock Tag (Annotation s)
t PlainBlock (Annotation s)
c
where
t :: Tag (Annotation s)
t = Optic' (TagOpticKind s) NoIx s (Tag (Annotation s))
-> s -> Tag (Annotation s)
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' (TagOpticKind s) NoIx s (Tag (Annotation s))
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag s
x
instance CanFork (BlockTag ann) where
fork :: Prism' (BlockTag ann) (Fork (BlockTag ann))
fork = (Tagged (Blocks ann) -> BlockTag ann)
-> (BlockTag ann -> Maybe (Tagged (Blocks ann)))
-> Prism
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' Tagged (Blocks ann) -> BlockTag ann
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork \case{ BlockTagFork Tagged (Blocks ann)
x -> Tagged (Blocks ann) -> Maybe (Tagged (Blocks ann))
forall a. a -> Maybe a
Just Tagged (Blocks ann)
x; BlockTag ann
_ -> Maybe (Tagged (Blocks ann))
forall a. Maybe a
Nothing }
instance CanBePlain (BlockTag ann) where
plain :: Prism' (BlockTag ann) (Plain (BlockTag ann))
plain = (Tagged (PlainBlock ann) -> BlockTag ann)
-> (BlockTag ann -> Maybe (Tagged (PlainBlock ann)))
-> Prism
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' Tagged (PlainBlock ann) -> BlockTag ann
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain \case{ BlockTagPlain Tagged (PlainBlock ann)
x -> Tagged (PlainBlock ann) -> Maybe (Tagged (PlainBlock ann))
forall a. a -> Maybe a
Just Tagged (PlainBlock ann)
x; BlockTag ann
_ -> Maybe (Tagged (PlainBlock ann))
forall a. Maybe a
Nothing }
instance HasAnnotation (BlockTag ann) (BlockTag ann) where
annotation :: Lens
(BlockTag ann)
(BlockTag ann)
(Annotation (BlockTag ann))
(Annotation (BlockTag ann))
annotation = (BlockTag ann -> ann)
-> (BlockTag ann -> ann -> BlockTag ann)
-> Lens (BlockTag ann) (BlockTag ann) ann ann
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens BlockTag ann -> ann
forall p. BlockTag p -> p
f BlockTag ann -> ann -> BlockTag ann
g
where
f :: BlockTag p -> p
f = \case
BlockTagFork Tagged (Blocks p)
x -> Optic' A_Lens NoIx (Tagged (Blocks p)) p -> Tagged (Blocks p) -> p
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (Blocks p)) p
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation Tagged (Blocks p)
x
BlockTagPlain Tagged (PlainBlock p)
x -> Optic' A_Lens NoIx (Tagged (PlainBlock p)) p
-> Tagged (PlainBlock p) -> p
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (PlainBlock p)) p
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation Tagged (PlainBlock p)
x
g :: BlockTag ann -> ann -> BlockTag ann
g = \case
BlockTagFork Tagged (Blocks ann)
x -> \ann
a -> Tagged (Blocks ann) -> BlockTag ann
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork (Tagged (Blocks ann) -> BlockTag ann)
-> Tagged (Blocks ann) -> BlockTag ann
forall a b. (a -> b) -> a -> b
$ Optic
A_Lens NoIx (Tagged (Blocks ann)) (Tagged (Blocks ann)) ann ann
-> ann -> Tagged (Blocks ann) -> Tagged (Blocks ann)
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic
A_Lens NoIx (Tagged (Blocks ann)) (Tagged (Blocks ann)) ann ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann
a Tagged (Blocks ann)
x
BlockTagPlain Tagged (PlainBlock ann)
x -> \ann
a -> Tagged (PlainBlock ann) -> BlockTag ann
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain (Tagged (PlainBlock ann) -> BlockTag ann)
-> Tagged (PlainBlock ann) -> BlockTag ann
forall a b. (a -> b) -> a -> b
$ Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
ann
ann
-> ann -> Tagged (PlainBlock ann) -> Tagged (PlainBlock ann)
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
ann
ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann
a Tagged (PlainBlock ann)
x
instance HasManyAnnotations (BlockTag ann) (BlockTag ann') where
allAnnotations :: Traversal
(BlockTag ann)
(BlockTag ann')
(Annotation (BlockTag ann))
(Annotation (BlockTag ann'))
allAnnotations = TraversalVL (BlockTag ann) (BlockTag ann') ann ann'
-> Traversal (BlockTag ann) (BlockTag ann') ann ann'
forall s t a b. TraversalVL s t a b -> Traversal s t a b
traversalVL \ann -> f ann'
f -> \case
BlockTagFork x -> Tagged (Blocks ann') -> BlockTag ann'
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork (Tagged (Blocks ann') -> BlockTag ann')
-> f (Tagged (Blocks ann')) -> f (BlockTag ann')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann'))
ann
ann'
-> (ann -> f ann')
-> Tagged (Blocks ann)
-> f (Tagged (Blocks ann'))
forall k (f :: * -> *) (is :: IxList) s t a b.
(Is k A_Traversal, Applicative f) =>
Optic k is s t a b -> (a -> f b) -> s -> f t
traverseOf Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann'))
ann
ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f Tagged (Blocks ann)
x
BlockTagPlain x -> Tagged (PlainBlock ann') -> BlockTag ann'
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain (Tagged (PlainBlock ann') -> BlockTag ann')
-> f (Tagged (PlainBlock ann')) -> f (BlockTag ann')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
A_Traversal
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann'))
ann
ann'
-> (ann -> f ann')
-> Tagged (PlainBlock ann)
-> f (Tagged (PlainBlock ann'))
forall k (f :: * -> *) (is :: IxList) s t a b.
(Is k A_Traversal, Applicative f) =>
Optic k is s t a b -> (a -> f b) -> s -> f t
traverseOf Optic
A_Traversal
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann'))
ann
ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f Tagged (PlainBlock ann)
x
instance HasManyMetadata (BlockTag ann) where
allMetadata :: Traversal' (BlockTag ann) Metadata
allMetadata = (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
Metadata
Metadata
-> Traversal' (BlockTag ann) Metadata
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
Metadata
Metadata
forall x. HasManyMetadata x => Traversal' x Metadata
allMetadata) Traversal' (BlockTag ann) Metadata
-> Optic' An_AffineTraversal NoIx (BlockTag ann) Metadata
-> Traversal' (BlockTag ann) Metadata
forall k l (is :: IxList) s a (js :: IxList).
(Is k A_Traversal, Is l A_Traversal) =>
Optic' k is s a -> Optic' l js s a -> Traversal' s a
`adjoin` (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
-> Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
Metadata
Metadata
-> Optic' An_AffineTraversal NoIx (BlockTag ann) Metadata
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
Metadata
Metadata
forall x.
HasMetadata x =>
Optic' (MetadataOpticKind x) NoIx x Metadata
metadata)
instance HasManyParagraphs (BlockTag ann) where
allParagraphs :: Traversal' (BlockTag ann) (Paragraph (Annotation (BlockTag ann)))
allParagraphs = Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Paragraph ann)
(Paragraph ann)
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(Paragraph ann)
(Paragraph ann)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Paragraph ann)
(Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs
instance HasManyPlainBlocks (BlockTag ann) where
allPlainBlocks :: Traversal'
(BlockTag ann) (Tagged (PlainBlock (Annotation (BlockTag ann))))
allPlainBlocks = (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall x.
HasManyPlainBlocks x =>
Traversal' x (Tagged (PlainBlock (Annotation x)))
allPlainBlocks) Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
-> Optic' A_Prism NoIx (BlockTag ann) (Tagged (PlainBlock ann))
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall k l (is :: IxList) s a (js :: IxList).
(Is k A_Traversal, Is l A_Traversal) =>
Optic' k is s a -> Optic' l js s a -> Traversal' s a
`adjoin` Optic' A_Prism NoIx (BlockTag ann) (Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain
instance HasManyPlainInlines (BlockTag ann) where
allPlainInlines :: Traversal' (BlockTag ann) (Fragment (Annotation (BlockTag ann)))
allPlainInlines = Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Fragment ann)
(Fragment ann)
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(Fragment ann)
(Fragment ann)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Fragment ann)
(Fragment ann)
forall x.
HasManyPlainInlines x =>
Traversal' x (Fragment (Annotation x))
allPlainInlines
instance HasManyTags (BlockTag ann) where
allTags :: Traversal' (BlockTag ann) (Tag (Annotation (BlockTag ann)))
allTags = (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
-> Optic
A_Traversal NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags) Optic
A_Traversal NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
-> Optic' An_AffineTraversal NoIx (BlockTag ann) (Tag ann)
-> Optic
A_Traversal NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
forall k l (is :: IxList) s a (js :: IxList).
(Is k A_Traversal, Is l A_Traversal) =>
Optic' k is s a -> Optic' l js s a -> Traversal' s a
`adjoin` (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
-> Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
(Tag ann)
(Tag ann)
-> Optic' An_AffineTraversal NoIx (BlockTag ann) (Tag ann)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
(Tag ann)
(Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag)
allInlineTags :: Traversal' (BlockTag ann) (Tag (Annotation (BlockTag ann)))
allInlineTags = Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(Tagged (Blocks ann))
(Tagged (Blocks ann))
-> Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
-> Optic
A_Traversal NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
A_Traversal
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allInlineTags
instance HasTag (BlockTag ann) where
type TagOpticKind (BlockTag ann) = A_Lens
tag :: Optic'
(TagOpticKind (BlockTag ann))
NoIx
(BlockTag ann)
(Tag (Annotation (BlockTag ann)))
tag = (BlockTag ann -> Tag ann)
-> (BlockTag ann -> Tag ann -> BlockTag ann)
-> Lens (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens BlockTag ann -> Tag ann
forall ann. BlockTag ann -> Tag ann
f BlockTag ann -> Tag ann -> BlockTag ann
forall ann. BlockTag ann -> Tag ann -> BlockTag ann
g
where
f :: BlockTag ann -> Tag ann
f = \case
BlockTagFork Tagged (Blocks ann)
x -> Optic' A_Lens NoIx (Tagged (Blocks ann)) (Tag ann)
-> Tagged (Blocks ann) -> Tag ann
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (Blocks ann)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tagged (Blocks ann)
x
BlockTagPlain Tagged (PlainBlock ann)
x -> Optic' A_Lens NoIx (Tagged (PlainBlock ann)) (Tag ann)
-> Tagged (PlainBlock ann) -> Tag ann
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Tagged (PlainBlock ann)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tagged (PlainBlock ann)
x
g :: BlockTag ann -> Tag ann -> BlockTag ann
g = \case
BlockTagFork Tagged (Blocks ann)
x -> \Tag ann
a -> Tagged (Blocks ann) -> BlockTag ann
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork (Optic
A_Lens
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
-> Tag ann -> Tagged (Blocks ann) -> Tagged (Blocks ann)
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic
A_Lens
NoIx
(Tagged (Blocks ann))
(Tagged (Blocks ann))
(Tag ann)
(Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
a Tagged (Blocks ann)
x)
BlockTagPlain Tagged (PlainBlock ann)
x -> \Tag ann
a -> Tagged (PlainBlock ann) -> BlockTag ann
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain (Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
(Tag ann)
(Tag ann)
-> Tag ann -> Tagged (PlainBlock ann) -> Tagged (PlainBlock ann)
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic
A_Lens
NoIx
(Tagged (PlainBlock ann))
(Tagged (PlainBlock ann))
(Tag ann)
(Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
a Tagged (PlainBlock ann)
x)
instance HasMetadata (BlockTag ann) where
type MetadataOpticKind (BlockTag ann) = A_Lens
metadata :: Optic'
(MetadataOpticKind (BlockTag ann)) NoIx (BlockTag ann) Metadata
metadata = Optic A_Lens NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Optic A_Lens NoIx (BlockTag ann) (BlockTag ann) (Tag ann) (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Optic
A_Lens NoIx (BlockTag ann) (BlockTag ann) Metadata Metadata
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
forall x.
HasMetadata x =>
Optic' (MetadataOpticKind x) NoIx x Metadata
metadata
blockTag :: Prism' (Block ann) (BlockTag ann)
blockTag :: Prism' (Block ann) (BlockTag ann)
blockTag = (BlockTag ann -> Block ann)
-> (Block ann -> Maybe (BlockTag ann))
-> Prism' (Block ann) (BlockTag ann)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' BlockTag ann -> Block ann
forall ann. BlockTag ann -> Block ann
f Block ann -> Maybe (BlockTag ann)
forall ann. Block ann -> Maybe (BlockTag ann)
g
where
f :: BlockTag ann -> Block ann
f = \case
BlockTagFork Tagged (Blocks ann)
x -> Tagged (Blocks ann) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork Tagged (Blocks ann)
x
BlockTagPlain Tagged (PlainBlock ann)
x -> Tagged (PlainBlock ann) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain Tagged (PlainBlock ann)
x
g :: Block ann -> Maybe (BlockTag ann)
g = \case
BlockFork Tagged (Blocks ann)
x -> BlockTag ann -> Maybe (BlockTag ann)
forall a. a -> Maybe a
Just (Tagged (Blocks ann) -> BlockTag ann
forall ann. Tagged (Blocks ann) -> BlockTag ann
BlockTagFork Tagged (Blocks ann)
x)
BlockPlain Tagged (PlainBlock ann)
x -> BlockTag ann -> Maybe (BlockTag ann)
forall a. a -> Maybe a
Just (Tagged (PlainBlock ann) -> BlockTag ann
forall ann. Tagged (PlainBlock ann) -> BlockTag ann
BlockTagPlain Tagged (PlainBlock ann)
x)
Block ann
_ -> Maybe (BlockTag ann)
forall a. Maybe a
Nothing