module ProAbstract.Structure.Block
    ( Block (..), paragraph, Blocks (..), Tagged (..)
    ) where

import ProAbstract.Annotation
import ProAbstract.Content
import ProAbstract.Structure.Fork
import ProAbstract.Metadata
import ProAbstract.Structure.CanBePlain
import ProAbstract.Structure.CanFork
import ProAbstract.Structure.HasManyParagraphs
import ProAbstract.Structure.HasManyPlainBlocks
import ProAbstract.Structure.HasManyPlainInlines
import ProAbstract.Structure.Paragraph
import ProAbstract.Structure.Plain
import ProAbstract.Structure.PlainBlock
import ProAbstract.Tag


-- ⭐ Block

data Block ann =
    BlockPlain     (Tagged (PlainBlock ann)) -- ^ 'ProAbstract.plain'
  | BlockParagraph (Paragraph ann)           -- ^ 'ProAbstract.paragraph'
  | BlockFork      (Tagged (Blocks ann))     -- ^ 'ProAbstract.fork'
  deriving stock (Block ann -> Block ann -> Bool
(Block ann -> Block ann -> Bool)
-> (Block ann -> Block ann -> Bool) -> Eq (Block ann)
forall ann. Eq ann => Block ann -> Block ann -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Block ann -> Block ann -> Bool
$c/= :: forall ann. Eq ann => Block ann -> Block ann -> Bool
== :: Block ann -> Block ann -> Bool
$c== :: forall ann. Eq ann => Block ann -> Block ann -> Bool
Eq, Int -> Block ann -> ShowS
[Block ann] -> ShowS
Block ann -> String
(Int -> Block ann -> ShowS)
-> (Block ann -> String)
-> ([Block ann] -> ShowS)
-> Show (Block ann)
forall ann. Show ann => Int -> Block ann -> ShowS
forall ann. Show ann => [Block ann] -> ShowS
forall ann. Show ann => Block ann -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Block ann] -> ShowS
$cshowList :: forall ann. Show ann => [Block ann] -> ShowS
show :: Block ann -> String
$cshow :: forall ann. Show ann => Block ann -> String
showsPrec :: Int -> Block ann -> ShowS
$cshowsPrec :: forall ann. Show ann => Int -> Block ann -> ShowS
Show, (forall x. Block ann -> Rep (Block ann) x)
-> (forall x. Rep (Block ann) x -> Block ann)
-> Generic (Block ann)
forall x. Rep (Block ann) x -> Block ann
forall x. Block ann -> Rep (Block ann) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ann x. Rep (Block ann) x -> Block ann
forall ann x. Block ann -> Rep (Block ann) x
$cto :: forall ann x. Rep (Block ann) x -> Block ann
$cfrom :: forall ann x. Block ann -> Rep (Block ann) x
Generic)
  deriving anyclass (Eq (Block ann)
Eq (Block ann)
-> (Int -> Block ann -> Int)
-> (Block ann -> Int)
-> Hashable (Block ann)
Int -> Block ann -> Int
Block ann -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
forall ann. Hashable ann => Eq (Block ann)
forall ann. Hashable ann => Int -> Block ann -> Int
forall ann. Hashable ann => Block ann -> Int
hash :: Block ann -> Int
$chash :: forall ann. Hashable ann => Block ann -> Int
hashWithSalt :: Int -> Block ann -> Int
$chashWithSalt :: forall ann. Hashable ann => Int -> Block ann -> Int
$cp1Hashable :: forall ann. Hashable ann => Eq (Block ann)
Hashable, Block ann -> ()
(Block ann -> ()) -> NFData (Block ann)
forall ann. NFData ann => Block ann -> ()
forall a. (a -> ()) -> NFData a
rnf :: Block ann -> ()
$crnf :: forall ann. NFData ann => Block ann -> ()
NFData)

type instance Annotation (Block ann) = ann

type instance Plain (Block ann) = Tagged (PlainBlock ann)

type instance Fork (Block ann) = Tagged (Blocks ann)

instance HasMetadata (Block ann) where
    type MetadataOpticKind (Block ann) = An_AffineTraversal
    metadata :: Optic' (MetadataOpticKind (Block ann)) NoIx (Block ann) Metadata
metadata = Optic
  An_AffineTraversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Optic
  An_AffineTraversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Optic
     An_AffineTraversal NoIx (Block ann) (Block 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

instance HasManyAnnotations (Block ann) (Block ann') where
    allAnnotations :: Traversal
  (Block ann)
  (Block ann')
  (Annotation (Block ann))
  (Annotation (Block ann'))
allAnnotations = TraversalVL (Block ann) (Block ann') ann ann'
-> Traversal (Block ann) (Block ann') ann ann'
forall s t a b. TraversalVL s t a b -> Traversal s t a b
traversalVL \ann -> f ann'
f -> \case
        BlockPlain     x -> Tagged (PlainBlock ann') -> Block ann'
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain     (Tagged (PlainBlock ann') -> Block ann')
-> f (Tagged (PlainBlock ann')) -> f (Block 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
        BlockParagraph x -> Paragraph ann' -> Block ann'
forall ann. Paragraph ann -> Block ann
BlockParagraph (Paragraph ann' -> Block ann')
-> f (Paragraph ann') -> f (Block ann')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic A_Traversal NoIx (Paragraph ann) (Paragraph ann') ann ann'
-> (ann -> f ann') -> Paragraph ann -> f (Paragraph 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 (Paragraph ann) (Paragraph ann') ann ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f Paragraph ann
x
        BlockFork      x -> Tagged (Blocks ann') -> Block ann'
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork      (Tagged (Blocks ann') -> Block ann')
-> f (Tagged (Blocks ann')) -> f (Block 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

instance HasAnnotation (Block ann) (Block ann) where
    annotation :: Lens
  (Block ann)
  (Block ann)
  (Annotation (Block ann))
  (Annotation (Block ann))
annotation = (Block ann -> ann)
-> (Block ann -> ann -> Block ann)
-> Lens (Block ann) (Block ann) ann ann
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Block ann -> ann
forall p. Block p -> p
f Block ann -> ann -> Block ann
g
      where
        f :: Block p -> p
f = \case
            BlockPlain     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
            BlockParagraph Paragraph p
x -> Optic' A_Lens NoIx (Paragraph p) p -> Paragraph p -> p
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (Paragraph p) p
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation Paragraph p
x
            BlockFork      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
        g :: Block ann -> ann -> Block ann
g = \case
            BlockPlain     Tagged (PlainBlock ann)
x -> \ann
a -> Tagged (PlainBlock ann) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain     (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)
            BlockParagraph Paragraph ann
x -> \ann
a -> Paragraph ann -> Block ann
forall ann. Paragraph ann -> Block ann
BlockParagraph (Optic A_Lens NoIx (Paragraph ann) (Paragraph ann) ann ann
-> ann -> Paragraph ann -> Paragraph 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 (Paragraph ann) (Paragraph ann) ann ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann
a Paragraph ann
x)
            BlockFork      Tagged (Blocks ann)
x -> \ann
a -> Tagged (Blocks ann) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork      (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)

instance HasManyPlainInlines (Block ann) where
    allPlainInlines :: Traversal' (Block ann) (Fragment (Annotation (Block ann)))
allPlainInlines = Optic
  A_Traversal
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs Optic
  A_Traversal
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Paragraph ann)
     (Paragraph ann)
     (Fragment ann)
     (Fragment ann)
-> Optic
     A_Traversal
     NoIx
     (Block ann)
     (Block 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
  (Paragraph ann)
  (Paragraph ann)
  (Fragment ann)
  (Fragment ann)
forall x.
HasManyPlainInlines x =>
Traversal' x (Fragment (Annotation x))
allPlainInlines

instance HasManyParagraphs (Block ann) where
    allParagraphs :: Traversal' (Block ann) (Paragraph (Annotation (Block ann)))
allParagraphs = Prism' (Block ann) (Paragraph ann)
forall ann. Prism' (Block ann) (Paragraph ann)
paragraph Prism' (Block ann) (Paragraph ann)
-> Optic' A_Traversal NoIx (Block ann) (Paragraph ann)
-> Optic' A_Traversal NoIx (Block ann) (Paragraph 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
  (Block ann)
  (Block ann)
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block 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 (Block ann) where
    allPlainBlocks :: Traversal'
  (Block ann) (Tagged (PlainBlock (Annotation (Block ann))))
allPlainBlocks = Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
-> Optic' A_Traversal NoIx (Block ann) (Tagged (PlainBlock ann))
-> Optic' A_Traversal NoIx (Block 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
  (Block ann)
  (Block ann)
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block 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)

instance HasTag (Block ann) where
    type TagOpticKind (Block ann) = An_AffineTraversal
    tag :: Optic'
  (TagOpticKind (Block ann))
  NoIx
  (Block ann)
  (Tag (Annotation (Block ann)))
tag = (Block ann -> Either (Block ann) (Tag ann))
-> (Block ann -> Tag ann -> Block ann)
-> AffineTraversal (Block ann) (Block ann) (Tag ann) (Tag ann)
forall s t a b.
(s -> Either t a) -> (s -> b -> t) -> AffineTraversal s t a b
atraversal Block ann -> Either (Block ann) (Tag ann)
forall ann. Block ann -> Either (Block ann) (Tag ann)
f Block ann -> Tag ann -> Block ann
forall ann. Block ann -> Tag ann -> Block ann
g
      where
        f :: Block ann -> Either (Block ann) (Tag ann)
f = \case
            BlockPlain Tagged (PlainBlock ann)
x -> Tag ann -> Either (Block ann) (Tag ann)
forall a b. b -> Either a b
Right (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)
            BlockFork  Tagged (Blocks ann)
x -> Tag ann -> Either (Block ann) (Tag ann)
forall a b. b -> Either a b
Right (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)
            Block ann
x -> Block ann -> Either (Block ann) (Tag ann)
forall a b. a -> Either a b
Left Block ann
x
        g :: Block ann -> Tag ann -> Block ann
g = \case
            BlockPlain Tagged (PlainBlock ann)
x -> \Tag ann
a -> Tagged (PlainBlock ann) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain (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)
            BlockFork  Tagged (Blocks ann)
x -> \Tag ann
a -> Tagged (Blocks ann) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork  (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)
            Block ann
x -> \Tag ann
_ -> Block ann
x

instance HasManyTags (Block ann) where
    allTags :: Traversal' (Block ann) (Tag (Annotation (Block ann)))
allTags = (Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block ann) (Block 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 (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block 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` (Prism' (Block ann) (Paragraph ann)
forall ann. Prism' (Block ann) (Paragraph ann)
paragraph Prism' (Block ann) (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Paragraph ann)
     (Paragraph ann)
     (Tag ann)
     (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block 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
  (Paragraph ann)
  (Paragraph ann)
  (Tag ann)
  (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags) Optic A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic' An_AffineTraversal NoIx (Block ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block 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
  (Block ann)
  (Block ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block 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' (Block ann) (Tag (Annotation (Block ann)))
allInlineTags = Optic
  A_Traversal
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs Optic
  A_Traversal
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Paragraph ann)
     (Paragraph ann)
     (Tag ann)
     (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block 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
  (Paragraph ann)
  (Paragraph ann)
  (Tag ann)
  (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allInlineTags

instance HasManyBlockTags (Block ann) where
    allBlockTags :: Traversal' (Block ann) (Tag (Annotation (Block ann)))
allBlockTags = (Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
forall x. CanFork x => Prism' x (Fork x)
fork Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block ann) (Block 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. HasManyBlockTags x => Traversal' x (Tag (Annotation x))
allBlockTags) Optic A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic' An_AffineTraversal NoIx (Block ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block 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
  (Block ann)
  (Block ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
  A_Prism
  NoIx
  (Block ann)
  (Block 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 (Block 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)

instance HasWitherableInlineTags (Block ann) where
    witherInlineTags :: (Tag (Annotation (Block ann))
 -> f (Maybe (Tag (Annotation (Block ann)))))
-> Block ann -> f (Block ann)
witherInlineTags Tag (Annotation (Block ann))
-> f (Maybe (Tag (Annotation (Block ann))))
f = Optic
  A_Traversal
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
-> (Paragraph ann -> f (Paragraph ann))
-> Block ann
-> f (Block 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
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs ((Tag (Annotation (Paragraph ann))
 -> f (Maybe (Tag (Annotation (Paragraph ann)))))
-> Paragraph ann -> f (Paragraph ann)
forall x (f :: * -> *).
(HasWitherableInlineTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherInlineTags Tag (Annotation (Paragraph ann))
-> f (Maybe (Tag (Annotation (Paragraph ann))))
Tag (Annotation (Block ann))
-> f (Maybe (Tag (Annotation (Block ann))))
f)

instance HasManyMetadata (Block ann) where
    allMetadata :: Traversal' (Block ann) Metadata
allMetadata = Optic A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags Optic A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Traversal' (Block 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 (Tag ann) (Tag ann) Metadata Metadata
forall x.
HasMetadata x =>
Optic' (MetadataOpticKind x) NoIx x Metadata
metadata

instance CanFork (Block ann) where
    fork :: Prism' (Block ann) (Fork (Block ann))
fork = (Tagged (Blocks ann) -> Block ann)
-> (Block ann -> Maybe (Tagged (Blocks ann)))
-> Prism
     (Block ann) (Block 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) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork
        \case{ BlockFork Tagged (Blocks ann)
t -> Tagged (Blocks ann) -> Maybe (Tagged (Blocks ann))
forall a. a -> Maybe a
Just Tagged (Blocks ann)
t; Block ann
_ -> Maybe (Tagged (Blocks ann))
forall a. Maybe a
Nothing }

instance CanBePlain (Block ann) where
    plain :: Prism' (Block ann) (Plain (Block ann))
plain = (Tagged (PlainBlock ann) -> Block ann)
-> (Block ann -> Maybe (Tagged (PlainBlock ann)))
-> Prism
     (Block ann)
     (Block 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) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain
        \case{ BlockPlain Tagged (PlainBlock ann)
t -> Tagged (PlainBlock ann) -> Maybe (Tagged (PlainBlock ann))
forall a. a -> Maybe a
Just Tagged (PlainBlock ann)
t; Block ann
_ -> Maybe (Tagged (PlainBlock ann))
forall a. Maybe a
Nothing }

paragraph :: Prism' (Block ann) (Paragraph ann)
paragraph :: Prism' (Block ann) (Paragraph ann)
paragraph = (Paragraph ann -> Block ann)
-> (Block ann -> Maybe (Paragraph ann))
-> Prism' (Block ann) (Paragraph ann)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism'
    Paragraph ann -> Block ann
forall ann. Paragraph ann -> Block ann
BlockParagraph
    \case{ BlockParagraph Paragraph ann
p -> Paragraph ann -> Maybe (Paragraph ann)
forall a. a -> Maybe a
Just Paragraph ann
p; Block ann
_ -> Maybe (Paragraph ann)
forall a. Maybe a
Nothing }


-- ⭐ Blocks

newtype Blocks ann =
    Blocks
      (Seq (Block ann)) -- ^ 'ProAbstract.content'
  deriving stock (Blocks ann -> Blocks ann -> Bool
(Blocks ann -> Blocks ann -> Bool)
-> (Blocks ann -> Blocks ann -> Bool) -> Eq (Blocks ann)
forall ann. Eq ann => Blocks ann -> Blocks ann -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Blocks ann -> Blocks ann -> Bool
$c/= :: forall ann. Eq ann => Blocks ann -> Blocks ann -> Bool
== :: Blocks ann -> Blocks ann -> Bool
$c== :: forall ann. Eq ann => Blocks ann -> Blocks ann -> Bool
Eq, Int -> Blocks ann -> ShowS
[Blocks ann] -> ShowS
Blocks ann -> String
(Int -> Blocks ann -> ShowS)
-> (Blocks ann -> String)
-> ([Blocks ann] -> ShowS)
-> Show (Blocks ann)
forall ann. Show ann => Int -> Blocks ann -> ShowS
forall ann. Show ann => [Blocks ann] -> ShowS
forall ann. Show ann => Blocks ann -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Blocks ann] -> ShowS
$cshowList :: forall ann. Show ann => [Blocks ann] -> ShowS
show :: Blocks ann -> String
$cshow :: forall ann. Show ann => Blocks ann -> String
showsPrec :: Int -> Blocks ann -> ShowS
$cshowsPrec :: forall ann. Show ann => Int -> Blocks ann -> ShowS
Show, (forall x. Blocks ann -> Rep (Blocks ann) x)
-> (forall x. Rep (Blocks ann) x -> Blocks ann)
-> Generic (Blocks ann)
forall x. Rep (Blocks ann) x -> Blocks ann
forall x. Blocks ann -> Rep (Blocks ann) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ann x. Rep (Blocks ann) x -> Blocks ann
forall ann x. Blocks ann -> Rep (Blocks ann) x
$cto :: forall ann x. Rep (Blocks ann) x -> Blocks ann
$cfrom :: forall ann x. Blocks ann -> Rep (Blocks ann) x
Generic)
  deriving anyclass (Eq (Blocks ann)
Eq (Blocks ann)
-> (Int -> Blocks ann -> Int)
-> (Blocks ann -> Int)
-> Hashable (Blocks ann)
Int -> Blocks ann -> Int
Blocks ann -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
forall ann. Hashable ann => Eq (Blocks ann)
forall ann. Hashable ann => Int -> Blocks ann -> Int
forall ann. Hashable ann => Blocks ann -> Int
hash :: Blocks ann -> Int
$chash :: forall ann. Hashable ann => Blocks ann -> Int
hashWithSalt :: Int -> Blocks ann -> Int
$chashWithSalt :: forall ann. Hashable ann => Int -> Blocks ann -> Int
$cp1Hashable :: forall ann. Hashable ann => Eq (Blocks ann)
Hashable, Blocks ann -> ()
(Blocks ann -> ()) -> NFData (Blocks ann)
forall ann. NFData ann => Blocks ann -> ()
forall a. (a -> ()) -> NFData a
rnf :: Blocks ann -> ()
$crnf :: forall ann. NFData ann => Blocks ann -> ()
NFData)
  deriving newtype (b -> Blocks ann -> Blocks ann
NonEmpty (Blocks ann) -> Blocks ann
Blocks ann -> Blocks ann -> Blocks ann
(Blocks ann -> Blocks ann -> Blocks ann)
-> (NonEmpty (Blocks ann) -> Blocks ann)
-> (forall b. Integral b => b -> Blocks ann -> Blocks ann)
-> Semigroup (Blocks ann)
forall b. Integral b => b -> Blocks ann -> Blocks ann
forall ann. NonEmpty (Blocks ann) -> Blocks ann
forall ann. Blocks ann -> Blocks ann -> Blocks ann
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall ann b. Integral b => b -> Blocks ann -> Blocks ann
stimes :: b -> Blocks ann -> Blocks ann
$cstimes :: forall ann b. Integral b => b -> Blocks ann -> Blocks ann
sconcat :: NonEmpty (Blocks ann) -> Blocks ann
$csconcat :: forall ann. NonEmpty (Blocks ann) -> Blocks ann
<> :: Blocks ann -> Blocks ann -> Blocks ann
$c<> :: forall ann. Blocks ann -> Blocks ann -> Blocks ann
Semigroup, Semigroup (Blocks ann)
Blocks ann
Semigroup (Blocks ann)
-> Blocks ann
-> (Blocks ann -> Blocks ann -> Blocks ann)
-> ([Blocks ann] -> Blocks ann)
-> Monoid (Blocks ann)
[Blocks ann] -> Blocks ann
Blocks ann -> Blocks ann -> Blocks ann
forall ann. Semigroup (Blocks ann)
forall ann. Blocks ann
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall ann. [Blocks ann] -> Blocks ann
forall ann. Blocks ann -> Blocks ann -> Blocks ann
mconcat :: [Blocks ann] -> Blocks ann
$cmconcat :: forall ann. [Blocks ann] -> Blocks ann
mappend :: Blocks ann -> Blocks ann -> Blocks ann
$cmappend :: forall ann. Blocks ann -> Blocks ann -> Blocks ann
mempty :: Blocks ann
$cmempty :: forall ann. Blocks ann
$cp1Monoid :: forall ann. Semigroup (Blocks ann)
Monoid)

type instance Contents (Blocks ann) = Block ann

instance HasContents (Blocks ann) (Blocks ann') where
    contents :: Lens
  (Blocks ann)
  (Blocks ann')
  (Seq (Contents (Blocks ann)))
  (Seq (Contents (Blocks ann')))
contents = Optic
  An_Iso
  NoIx
  (Blocks ann)
  (Blocks ann')
  (Seq (Block ann))
  (Seq (Block ann'))
-> Optic
     A_Lens
     NoIx
     (Blocks ann)
     (Blocks ann')
     (Seq (Block ann))
     (Seq (Block ann'))
forall destKind srcKind (is :: IxList) s t a b.
Is srcKind destKind =>
Optic srcKind is s t a b -> Optic destKind is s t a b
castOptic Optic
  An_Iso
  NoIx
  (Blocks ann)
  (Blocks ann')
  (Seq (Block ann))
  (Seq (Block ann'))
forall s a t b. (Coercible s a, Coercible t b) => Iso s t a b
coerced

instance IsList (Blocks ann) where
    type Item (Blocks ann) = Block ann
    toList :: Blocks ann -> [Item (Blocks ann)]
toList (Blocks Seq (Block ann)
xs) = Seq (Block ann) -> [Item (Seq (Block ann))]
forall l. IsList l => l -> [Item l]
toList Seq (Block ann)
xs
    fromList :: [Item (Blocks ann)] -> Blocks ann
fromList [Item (Blocks ann)]
xs = Seq (Block ann) -> Blocks ann
forall ann. Seq (Block ann) -> Blocks ann
Blocks ([Item (Seq (Block ann))] -> Seq (Block ann)
forall l. IsList l => [Item l] -> l
fromList [Item (Seq (Block ann))]
[Item (Blocks ann)]
xs)

type instance Annotation (Blocks ann) = ann

instance HasManyAnnotations (Blocks ann) (Blocks ann') where
    allAnnotations :: Traversal
  (Blocks ann)
  (Blocks ann')
  (Annotation (Blocks ann))
  (Annotation (Blocks ann'))
allAnnotations = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann')
  (Seq (Block ann))
  (Seq (Block ann'))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann')
  (Seq (Block ann))
  (Seq (Block ann'))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann'))
     (Block ann)
     (Block ann')
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks ann')
     (Block ann)
     (Block 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
  (Seq (Block ann))
  (Seq (Block ann'))
  (Block ann)
  (Block ann')
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal
  NoIx
  (Blocks ann)
  (Blocks ann')
  (Block ann)
  (Block ann')
-> Optic A_Traversal NoIx (Block ann) (Block ann') ann ann'
-> Optic A_Traversal NoIx (Blocks ann) (Blocks ann') ann 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 (Block ann) (Block ann') ann ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations

instance HasManyPlainInlines (Blocks ann) where
    allPlainInlines :: Traversal' (Blocks ann) (Fragment (Annotation (Blocks ann)))
allPlainInlines = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal
     NoIx
     (Block ann)
     (Block ann)
     (Fragment ann)
     (Fragment ann)
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks 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
  (Block ann)
  (Block ann)
  (Fragment ann)
  (Fragment ann)
forall x.
HasManyPlainInlines x =>
Traversal' x (Fragment (Annotation x))
allPlainInlines

instance HasManyPlainBlocks (Blocks ann) where
    allPlainBlocks :: Traversal'
  (Blocks ann) (Tagged (PlainBlock (Annotation (Blocks ann))))
allPlainBlocks = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal
     NoIx
     (Block ann)
     (Block ann)
     (Tagged (PlainBlock ann))
     (Tagged (PlainBlock ann))
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks 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
  (Block ann)
  (Block ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
forall x.
HasManyPlainBlocks x =>
Traversal' x (Tagged (PlainBlock (Annotation x)))
allPlainBlocks

instance HasManyTags (Blocks ann) where
    allTags :: Traversal' (Blocks ann) (Tag (Annotation (Blocks ann)))
allTags = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks 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 (Block ann) (Block ann) (Tag ann) (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags
    allInlineTags :: Traversal' (Blocks ann) (Tag (Annotation (Blocks ann)))
allInlineTags = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks 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 (Block ann) (Block ann) (Tag ann) (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allInlineTags

instance HasManyBlockTags (Blocks ann) where
    allBlockTags :: Traversal' (Blocks ann) (Tag (Annotation (Blocks ann)))
allBlockTags = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal NoIx (Block ann) (Block ann) (Tag ann) (Tag ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks 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 (Block ann) (Block ann) (Tag ann) (Tag ann)
forall x. HasManyBlockTags x => Traversal' x (Tag (Annotation x))
allBlockTags

instance HasManyMetadata (Blocks ann) where
    allMetadata :: Traversal' (Blocks ann) Metadata
allMetadata = Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Traversal' (Blocks 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 (Tag ann) (Tag ann) Metadata Metadata
forall x.
HasMetadata x =>
Optic' (MetadataOpticKind x) NoIx x Metadata
metadata

instance HasManyParagraphs (Blocks ann) where
    allParagraphs :: Traversal' (Blocks ann) (Paragraph (Annotation (Blocks ann)))
allParagraphs = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> Optic
     A_Traversal
     NoIx
     (Block ann)
     (Block ann)
     (Paragraph ann)
     (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks 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
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs

instance HasWitherableTags (Blocks ann) where
    witherTags :: (Tag (Annotation (Blocks ann))
 -> f (Maybe (Tag (Annotation (Blocks ann)))))
-> Blocks ann -> f (Blocks ann)
witherTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> (Seq (Block ann) -> f (Seq (Block ann)))
-> Blocks ann
-> f (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_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents ((Seq (Block ann) -> f (Seq (Block ann)))
 -> Blocks ann -> f (Blocks ann))
-> (Seq (Block ann) -> f (Seq (Block ann)))
-> Blocks ann
-> f (Blocks ann)
forall a b. (a -> b) -> a -> b
$ (Block ann -> f (Maybe (Block ann)))
-> Seq (Block ann) -> f (Seq (Block ann))
forall (f :: * -> *) a b.
Applicative f =>
(a -> f (Maybe b)) -> Seq a -> f (Seq b)
seqWither \case
        BlockParagraph Paragraph ann
x ->
            Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann))
-> (Paragraph ann -> Block ann)
-> Paragraph ann
-> Maybe (Block ann)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Paragraph ann -> Block ann
forall ann. Paragraph ann -> Block ann
BlockParagraph (Paragraph ann -> Maybe (Block ann))
-> f (Paragraph ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
  A_Lens NoIx (Paragraph ann) (Paragraph ann) (Lines ann) (Lines ann)
-> (Lines ann -> f (Lines ann))
-> Paragraph ann
-> f (Paragraph 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_Lens NoIx (Paragraph ann) (Paragraph ann) (Lines ann) (Lines ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content ((Tag (Annotation (Lines ann))
 -> f (Maybe (Tag (Annotation (Lines ann)))))
-> Lines ann -> f (Lines ann)
forall x (f :: * -> *).
(HasWitherableTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherTags Tag (Annotation (Lines ann))
-> f (Maybe (Tag (Annotation (Lines ann))))
Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f) Paragraph ann
x
        BlockPlain Tagged (PlainBlock ann)
x ->
            Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f (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) f (Maybe (Tag ann))
-> (Maybe (Tag ann) -> f (Maybe (Block ann)))
-> f (Maybe (Block ann))
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
                Maybe (Tag ann)
Nothing -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Block ann)
forall a. Maybe a
Nothing
                Just Tag ann
t -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe (Block ann) -> f (Maybe (Block ann)))
-> (Tagged (PlainBlock ann) -> Maybe (Block ann))
-> Tagged (PlainBlock ann)
-> f (Maybe (Block ann))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann))
-> (Tagged (PlainBlock ann) -> Block ann)
-> Tagged (PlainBlock ann)
-> Maybe (Block ann)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tagged (PlainBlock ann) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain (Tagged (PlainBlock ann) -> Block ann)
-> (Tagged (PlainBlock ann) -> Tagged (PlainBlock ann))
-> Tagged (PlainBlock ann)
-> Block ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' A_Lens NoIx (Tagged (PlainBlock 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)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
t (Tagged (PlainBlock ann) -> f (Maybe (Block ann)))
-> Tagged (PlainBlock ann) -> f (Maybe (Block ann))
forall a b. (a -> b) -> a -> b
$ Tagged (PlainBlock ann)
x
        BlockFork Tagged (Blocks ann)
x ->
            Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f (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) f (Maybe (Tag ann))
-> (Maybe (Tag ann) -> f (Maybe (Block ann)))
-> f (Maybe (Block ann))
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
                Maybe (Tag ann)
Nothing -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Block ann)
forall a. Maybe a
Nothing
                Just Tag ann
t -> Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann))
-> (Tagged (Blocks ann) -> Block ann)
-> Tagged (Blocks ann)
-> Maybe (Block ann)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tagged (Blocks ann) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork (Tagged (Blocks ann) -> Block ann)
-> (Tagged (Blocks ann) -> Tagged (Blocks ann))
-> Tagged (Blocks ann)
-> Block ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' A_Lens NoIx (Tagged (Blocks 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)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
t (Tagged (Blocks ann) -> Maybe (Block ann))
-> f (Tagged (Blocks ann)) -> f (Maybe (Block ann))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> (Blocks ann -> f (Blocks 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_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content ((Tag (Annotation (Blocks ann))
 -> f (Maybe (Tag (Annotation (Blocks ann)))))
-> Blocks ann -> f (Blocks ann)
forall x (f :: * -> *).
(HasWitherableTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f) Tagged (Blocks ann)
x

instance HasWitherableBlockTags (Blocks ann) where
    witherBlockTags :: (Tag (Annotation (Blocks ann))
 -> f (Maybe (Tag (Annotation (Blocks ann)))))
-> Blocks ann -> f (Blocks ann)
witherBlockTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f = Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> (Seq (Block ann) -> f (Seq (Block ann)))
-> Blocks ann
-> f (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_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents ((Seq (Block ann) -> f (Seq (Block ann)))
 -> Blocks ann -> f (Blocks ann))
-> (Seq (Block ann) -> f (Seq (Block ann)))
-> Blocks ann
-> f (Blocks ann)
forall a b. (a -> b) -> a -> b
$ (Block ann -> f (Maybe (Block ann)))
-> Seq (Block ann) -> f (Seq (Block ann))
forall (f :: * -> *) a b.
Applicative f =>
(a -> f (Maybe b)) -> Seq a -> f (Seq b)
seqWither \case
        BlockParagraph Paragraph ann
x -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe (Block ann) -> f (Maybe (Block ann)))
-> Maybe (Block ann) -> f (Maybe (Block ann))
forall a b. (a -> b) -> a -> b
$ Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann)) -> Block ann -> Maybe (Block ann)
forall a b. (a -> b) -> a -> b
$ Paragraph ann -> Block ann
forall ann. Paragraph ann -> Block ann
BlockParagraph Paragraph ann
x
        BlockPlain Tagged (PlainBlock ann)
x ->
            Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f (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) f (Maybe (Tag ann))
-> (Maybe (Tag ann) -> f (Maybe (Block ann)))
-> f (Maybe (Block ann))
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
                Maybe (Tag ann)
Nothing -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Block ann)
forall a. Maybe a
Nothing
                Just Tag ann
t -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe (Block ann) -> f (Maybe (Block ann)))
-> (Tagged (PlainBlock ann) -> Maybe (Block ann))
-> Tagged (PlainBlock ann)
-> f (Maybe (Block ann))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann))
-> (Tagged (PlainBlock ann) -> Block ann)
-> Tagged (PlainBlock ann)
-> Maybe (Block ann)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tagged (PlainBlock ann) -> Block ann
forall ann. Tagged (PlainBlock ann) -> Block ann
BlockPlain (Tagged (PlainBlock ann) -> Block ann)
-> (Tagged (PlainBlock ann) -> Tagged (PlainBlock ann))
-> Tagged (PlainBlock ann)
-> Block ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' A_Lens NoIx (Tagged (PlainBlock 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)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
t (Tagged (PlainBlock ann) -> f (Maybe (Block ann)))
-> Tagged (PlainBlock ann) -> f (Maybe (Block ann))
forall a b. (a -> b) -> a -> b
$ Tagged (PlainBlock ann)
x
        BlockFork Tagged (Blocks ann)
x ->
            Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f (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) f (Maybe (Tag ann))
-> (Maybe (Tag ann) -> f (Maybe (Block ann)))
-> f (Maybe (Block ann))
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
                Maybe (Tag ann)
Nothing -> Maybe (Block ann) -> f (Maybe (Block ann))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Block ann)
forall a. Maybe a
Nothing
                Just Tag ann
t -> Block ann -> Maybe (Block ann)
forall a. a -> Maybe a
Just (Block ann -> Maybe (Block ann))
-> (Tagged (Blocks ann) -> Block ann)
-> Tagged (Blocks ann)
-> Maybe (Block ann)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tagged (Blocks ann) -> Block ann
forall ann. Tagged (Blocks ann) -> Block ann
BlockFork (Tagged (Blocks ann) -> Block ann)
-> (Tagged (Blocks ann) -> Tagged (Blocks ann))
-> Tagged (Blocks ann)
-> Block ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic' A_Lens NoIx (Tagged (Blocks 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)) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
t (Tagged (Blocks ann) -> Maybe (Block ann))
-> f (Tagged (Blocks ann)) -> f (Maybe (Block ann))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> (Blocks ann -> f (Blocks 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_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content ((Tag (Annotation (Blocks ann))
 -> f (Maybe (Tag (Annotation (Blocks ann)))))
-> Blocks ann -> f (Blocks ann)
forall x (f :: * -> *).
(HasWitherableBlockTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherBlockTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f) Tagged (Blocks ann)
x

instance HasWitherableInlineTags (Blocks ann) where
    witherInlineTags :: (Tag (Annotation (Blocks ann))
 -> f (Maybe (Tag (Annotation (Blocks ann)))))
-> Blocks ann -> f (Blocks ann)
witherInlineTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
f = Optic
  A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block ann)
-> (Block ann -> f (Block ann)) -> Blocks ann -> f (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_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents Optic
  A_Lens
  NoIx
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
-> Optic
     A_Traversal
     NoIx
     (Seq (Block ann))
     (Seq (Block ann))
     (Block ann)
     (Block ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Block ann) (Block 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
  (Seq (Block ann))
  (Seq (Block ann))
  (Block ann)
  (Block ann)
forall (t :: * -> *) a b.
Traversable t =>
Traversal (t a) (t b) a b
traversed) ((Tag (Annotation (Block ann))
 -> f (Maybe (Tag (Annotation (Block ann)))))
-> Block ann -> f (Block ann)
forall x (f :: * -> *).
(HasWitherableInlineTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherInlineTags Tag (Annotation (Blocks ann))
-> f (Maybe (Tag (Annotation (Blocks ann))))
Tag (Annotation (Block ann))
-> f (Maybe (Tag (Annotation (Block ann))))
f)


-- ⭐ Tagged Blocks

data instance Tagged (Blocks ann) =
  TaggedBlocks
    { Tagged (Blocks ann) -> Tag ann
blocksTag :: Tag ann -- ^ 'ProAbstract.tag'
    , Tagged (Blocks ann) -> Blocks ann
taggedBlocks :: Blocks ann -- ^ 'ProAbstract.content'
    }
  deriving stock (Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
(Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool)
-> (Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool)
-> Eq (Tagged (Blocks ann))
forall ann.
Eq ann =>
Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
$c/= :: forall ann.
Eq ann =>
Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
== :: Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
$c== :: forall ann.
Eq ann =>
Tagged (Blocks ann) -> Tagged (Blocks ann) -> Bool
Eq, Int -> Tagged (Blocks ann) -> ShowS
[Tagged (Blocks ann)] -> ShowS
Tagged (Blocks ann) -> String
(Int -> Tagged (Blocks ann) -> ShowS)
-> (Tagged (Blocks ann) -> String)
-> ([Tagged (Blocks ann)] -> ShowS)
-> Show (Tagged (Blocks ann))
forall ann. Show ann => Int -> Tagged (Blocks ann) -> ShowS
forall ann. Show ann => [Tagged (Blocks ann)] -> ShowS
forall ann. Show ann => Tagged (Blocks ann) -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Tagged (Blocks ann)] -> ShowS
$cshowList :: forall ann. Show ann => [Tagged (Blocks ann)] -> ShowS
show :: Tagged (Blocks ann) -> String
$cshow :: forall ann. Show ann => Tagged (Blocks ann) -> String
showsPrec :: Int -> Tagged (Blocks ann) -> ShowS
$cshowsPrec :: forall ann. Show ann => Int -> Tagged (Blocks ann) -> ShowS
Show, (forall x. Tagged (Blocks ann) -> Rep (Tagged (Blocks ann)) x)
-> (forall x. Rep (Tagged (Blocks ann)) x -> Tagged (Blocks ann))
-> Generic (Tagged (Blocks ann))
forall x. Rep (Tagged (Blocks ann)) x -> Tagged (Blocks ann)
forall x. Tagged (Blocks ann) -> Rep (Tagged (Blocks ann)) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ann x. Rep (Tagged (Blocks ann)) x -> Tagged (Blocks ann)
forall ann x. Tagged (Blocks ann) -> Rep (Tagged (Blocks ann)) x
$cto :: forall ann x. Rep (Tagged (Blocks ann)) x -> Tagged (Blocks ann)
$cfrom :: forall ann x. Tagged (Blocks ann) -> Rep (Tagged (Blocks ann)) x
Generic)
  deriving anyclass (Eq (Tagged (Blocks ann))
Eq (Tagged (Blocks ann))
-> (Int -> Tagged (Blocks ann) -> Int)
-> (Tagged (Blocks ann) -> Int)
-> Hashable (Tagged (Blocks ann))
Int -> Tagged (Blocks ann) -> Int
Tagged (Blocks ann) -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
forall ann. Hashable ann => Eq (Tagged (Blocks ann))
forall ann. Hashable ann => Int -> Tagged (Blocks ann) -> Int
forall ann. Hashable ann => Tagged (Blocks ann) -> Int
hash :: Tagged (Blocks ann) -> Int
$chash :: forall ann. Hashable ann => Tagged (Blocks ann) -> Int
hashWithSalt :: Int -> Tagged (Blocks ann) -> Int
$chashWithSalt :: forall ann. Hashable ann => Int -> Tagged (Blocks ann) -> Int
$cp1Hashable :: forall ann. Hashable ann => Eq (Tagged (Blocks ann))
Hashable, Tagged (Blocks ann) -> ()
(Tagged (Blocks ann) -> ()) -> NFData (Tagged (Blocks ann))
forall ann. NFData ann => Tagged (Blocks ann) -> ()
forall a. (a -> ()) -> NFData a
rnf :: Tagged (Blocks ann) -> ()
$crnf :: forall ann. NFData ann => Tagged (Blocks ann) -> ()
NFData)

type instance Annotation (Tagged (Blocks ann)) = ann

instance HasTag (Tagged (Blocks ann)) where
    type TagOpticKind (Tagged (Blocks ann)) = A_Lens
    tag :: Optic'
  (TagOpticKind (Tagged (Blocks ann)))
  NoIx
  (Tagged (Blocks ann))
  (Tag (Annotation (Tagged (Blocks ann))))
tag = (Tagged (Blocks ann) -> Tag ann)
-> (Tagged (Blocks ann) -> Tag ann -> Tagged (Blocks ann))
-> Lens
     (Tagged (Blocks ann)) (Tagged (Blocks ann)) (Tag ann) (Tag ann)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Tagged (Blocks ann) -> Tag ann
forall ann. Tagged (Blocks ann) -> Tag ann
blocksTag \Tagged (Blocks ann)
x Tag ann
a -> Tagged (Blocks ann)
R:TaggedBlocks ann
x{ blocksTag :: Tag ann
blocksTag = Tag ann
a }

type instance Content (Tagged (Blocks ann)) = Blocks ann

type instance Contents (Tagged (Blocks ann)) = Block ann

instance HasManyAnnotations (Tagged (Blocks ann)) (Tagged (Blocks ann')) where
    allAnnotations :: Traversal
  (Tagged (Blocks ann))
  (Tagged (Blocks ann'))
  (Annotation (Tagged (Blocks ann)))
  (Annotation (Tagged (Blocks ann')))
allAnnotations = TraversalVL (Tagged (Blocks ann)) (Tagged (Blocks ann')) ann ann'
-> Traversal (Tagged (Blocks ann)) (Tagged (Blocks ann')) ann ann'
forall s t a b. TraversalVL s t a b -> Traversal s t a b
traversalVL \ann -> f ann'
f (TaggedBlocks t b) -> Tag ann' -> Blocks ann' -> Tagged (Blocks ann')
forall ann. Tag ann -> Blocks ann -> Tagged (Blocks ann)
TaggedBlocks
        (Tag ann' -> Blocks ann' -> Tagged (Blocks ann'))
-> f (Tag ann') -> f (Blocks ann' -> Tagged (Blocks ann'))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic A_Lens NoIx (Tag ann) (Tag ann') ann ann'
-> (ann -> f ann') -> Tag ann -> f (Tag 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_Lens NoIx (Tag ann) (Tag ann') ann ann'
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann -> f ann'
f Tag ann
t f (Blocks ann' -> Tagged (Blocks ann'))
-> f (Blocks ann') -> f (Tagged (Blocks ann'))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Optic A_Traversal NoIx (Blocks ann) (Blocks ann') ann ann'
-> (ann -> f ann') -> Blocks ann -> f (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 (Blocks ann) (Blocks ann') ann ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f Blocks ann
b

instance HasAnnotation (Tagged (Blocks ann)) (Tagged (Blocks ann)) where
     annotation :: Lens
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Annotation (Tagged (Blocks ann)))
  (Annotation (Tagged (Blocks ann)))
annotation = 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 Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Tag ann)
  (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) ann ann
-> Optic
     A_Lens NoIx (Tagged (Blocks ann)) (Tagged (Blocks ann)) ann 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 (Tag ann) (Tag ann) ann ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation

instance HasContent (Tagged (Blocks ann)) (Tagged (Blocks ann)) where
    content :: Lens
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Content (Tagged (Blocks ann)))
  (Content (Tagged (Blocks ann)))
content = (Tagged (Blocks ann) -> Blocks ann)
-> (Tagged (Blocks ann) -> Blocks ann -> Tagged (Blocks ann))
-> Lens
     (Tagged (Blocks ann))
     (Tagged (Blocks ann))
     (Blocks ann)
     (Blocks ann)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Tagged (Blocks ann) -> Blocks ann
forall ann. Tagged (Blocks ann) -> Blocks ann
taggedBlocks \Tagged (Blocks ann)
x Blocks ann
c -> Tagged (Blocks ann)
R:TaggedBlocks ann
x{ taggedBlocks :: Blocks ann
taggedBlocks = Blocks ann
c }

instance HasContents (Tagged (Blocks ann)) (Tagged (Blocks ann)) where
    contents :: Lens
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Seq (Contents (Tagged (Blocks ann))))
  (Seq (Contents (Tagged (Blocks ann))))
contents = Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Lens
     NoIx
     (Blocks ann)
     (Blocks ann)
     (Seq (Block ann))
     (Seq (Block ann))
-> Optic
     A_Lens
     NoIx
     (Tagged (Blocks ann))
     (Tagged (Blocks ann))
     (Seq (Block ann))
     (Seq (Block 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
  (Blocks ann)
  (Blocks ann)
  (Seq (Block ann))
  (Seq (Block ann))
forall x x'.
HasContents x x' =>
Lens x x' (Seq (Contents x)) (Seq (Contents x'))
contents

instance HasMetadata (Tagged (Blocks ann)) where
    type MetadataOpticKind (Tagged (Blocks ann)) = A_Lens
    metadata :: Optic'
  (MetadataOpticKind (Tagged (Blocks ann)))
  NoIx
  (Tagged (Blocks ann))
  Metadata
metadata = 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 Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Tag ann)
  (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Optic
     A_Lens
     NoIx
     (Tagged (Blocks ann))
     (Tagged (Blocks 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

instance HasManyPlainInlines (Tagged (Blocks ann)) where
    allPlainInlines :: Traversal'
  (Tagged (Blocks ann)) (Fragment (Annotation (Tagged (Blocks ann))))
allPlainInlines = Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks ann)
     (Fragment ann)
     (Fragment ann)
-> Optic
     A_Traversal
     NoIx
     (Tagged (Blocks ann))
     (Tagged (Blocks 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
  (Blocks ann)
  (Blocks ann)
  (Fragment ann)
  (Fragment ann)
forall x.
HasManyPlainInlines x =>
Traversal' x (Fragment (Annotation x))
allPlainInlines

instance HasManyTags (Tagged (Blocks ann)) where
    allTags :: Traversal'
  (Tagged (Blocks ann)) (Tag (Annotation (Tagged (Blocks ann))))
allTags = 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 Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Tag ann)
  (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks ann)) (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks 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_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks 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 (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allTags)
    allInlineTags :: Traversal'
  (Tagged (Blocks ann)) (Tag (Annotation (Tagged (Blocks ann))))
allInlineTags = Optic
  A_Traversal
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs Optic
  A_Traversal
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Paragraph ann)
  (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Paragraph ann)
     (Paragraph ann)
     (Tag ann)
     (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks 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
  (Paragraph ann)
  (Paragraph ann)
  (Tag ann)
  (Tag ann)
forall x. HasManyTags x => Traversal' x (Tag (Annotation x))
allInlineTags

instance HasManyBlockTags (Tagged (Blocks ann)) where
    allBlockTags :: Traversal'
  (Tagged (Blocks ann)) (Tag (Annotation (Tagged (Blocks ann))))
allBlockTags = 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 Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Tag ann)
  (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks ann)) (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks 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_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Traversal NoIx (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
-> Optic' A_Traversal NoIx (Tagged (Blocks 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 (Blocks ann) (Blocks ann) (Tag ann) (Tag ann)
forall x. HasManyBlockTags x => Traversal' x (Tag (Annotation x))
allBlockTags)

instance HasWitherableInlineTags (Tagged (Blocks ann)) where
    witherInlineTags :: (Tag (Annotation (Tagged (Blocks ann)))
 -> f (Maybe (Tag (Annotation (Tagged (Blocks ann))))))
-> Tagged (Blocks ann) -> f (Tagged (Blocks ann))
witherInlineTags Tag (Annotation (Tagged (Blocks ann)))
-> f (Maybe (Tag (Annotation (Tagged (Blocks ann)))))
f = Optic
  A_Traversal
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Paragraph ann)
  (Paragraph ann)
-> (Paragraph ann -> f (Paragraph 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))
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs ((Tag (Annotation (Paragraph ann))
 -> f (Maybe (Tag (Annotation (Paragraph ann)))))
-> Paragraph ann -> f (Paragraph ann)
forall x (f :: * -> *).
(HasWitherableInlineTags x, Monad f) =>
(Tag (Annotation x) -> f (Maybe (Tag (Annotation x)))) -> x -> f x
witherInlineTags Tag (Annotation (Tagged (Blocks ann)))
-> f (Maybe (Tag (Annotation (Tagged (Blocks ann)))))
Tag (Annotation (Paragraph ann))
-> f (Maybe (Tag (Annotation (Paragraph ann))))
f)

instance HasManyMetadata (Tagged (Blocks ann)) where
    allMetadata :: Traversal' (Tagged (Blocks ann)) Metadata
allMetadata = 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
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Tag ann)
  (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) Metadata Metadata
-> Traversal' (Tagged (Blocks 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 (Tag ann) (Tag ann) Metadata Metadata
forall x.
HasMetadata x =>
Optic' (MetadataOpticKind x) NoIx x Metadata
metadata

instance HasManyParagraphs (Tagged (Blocks ann)) where
    allParagraphs :: Traversal'
  (Tagged (Blocks ann))
  (Paragraph (Annotation (Tagged (Blocks ann))))
allParagraphs = Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks ann)
     (Paragraph ann)
     (Paragraph ann)
-> Optic
     A_Traversal
     NoIx
     (Tagged (Blocks ann))
     (Tagged (Blocks 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
  (Blocks ann)
  (Blocks ann)
  (Paragraph ann)
  (Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs

instance HasManyPlainBlocks (Tagged (Blocks ann)) where
    allPlainBlocks :: Traversal'
  (Tagged (Blocks ann))
  (Tagged (PlainBlock (Annotation (Tagged (Blocks ann)))))
allPlainBlocks = Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (Tagged (Blocks ann))
  (Tagged (Blocks ann))
  (Blocks ann)
  (Blocks ann)
-> Optic
     A_Traversal
     NoIx
     (Blocks ann)
     (Blocks ann)
     (Tagged (PlainBlock ann))
     (Tagged (PlainBlock ann))
-> Optic
     A_Traversal
     NoIx
     (Tagged (Blocks ann))
     (Tagged (Blocks 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
  (Blocks ann)
  (Blocks ann)
  (Tagged (PlainBlock ann))
  (Tagged (PlainBlock ann))
forall x.
HasManyPlainBlocks x =>
Traversal' x (Tagged (PlainBlock (Annotation x)))
allPlainBlocks