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 (TaggedBlocks ann)
| BlockTagPlain (TaggedPlainBlock 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) = TaggedPlainBlock ann
type instance Fork (BlockTag ann) = TaggedBlocks 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 TaggedBlocks 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 (TaggedBlocks ann) (Blocks ann)
-> TaggedBlocks 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 (TaggedBlocks ann) (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content TaggedBlocks ann
x
BlockTagPlain TaggedPlainBlock 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 (TaggedPlainBlock ann) (PlainBlock ann)
-> TaggedPlainBlock 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 (TaggedPlainBlock ann) (PlainBlock ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content TaggedPlainBlock ann
x
g :: s -> BlockTagContent (Annotation s) -> BlockTag (Annotation s)
g s
x = \case
BlockTagContent_Fork Blocks (Annotation s)
c -> TaggedBlocks (Annotation s) -> BlockTag (Annotation s)
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork (TaggedBlocks (Annotation s) -> BlockTag (Annotation s))
-> TaggedBlocks (Annotation s) -> BlockTag (Annotation s)
forall a b. (a -> b) -> a -> b
$ Tag (Annotation s)
-> Blocks (Annotation s) -> TaggedBlocks (Annotation s)
forall ann. Tag ann -> Blocks ann -> TaggedBlocks ann
TaggedBlocks Tag (Annotation s)
t Blocks (Annotation s)
c
BlockTagContent_Plain PlainBlock (Annotation s)
c -> TaggedPlainBlock (Annotation s) -> BlockTag (Annotation s)
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain (TaggedPlainBlock (Annotation s) -> BlockTag (Annotation s))
-> TaggedPlainBlock (Annotation s) -> BlockTag (Annotation s)
forall a b. (a -> b) -> a -> b
$ Tag (Annotation s)
-> PlainBlock (Annotation s) -> TaggedPlainBlock (Annotation s)
forall ann. Tag ann -> PlainBlock ann -> TaggedPlainBlock 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 = (TaggedBlocks ann -> BlockTag ann)
-> (BlockTag ann -> Maybe (TaggedBlocks ann))
-> Prism
(BlockTag ann) (BlockTag ann) (TaggedBlocks ann) (TaggedBlocks ann)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' TaggedBlocks ann -> BlockTag ann
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork \case{ BlockTagFork TaggedBlocks ann
x -> TaggedBlocks ann -> Maybe (TaggedBlocks ann)
forall a. a -> Maybe a
Just TaggedBlocks ann
x; BlockTag ann
_ -> Maybe (TaggedBlocks ann)
forall a. Maybe a
Nothing }
instance CanBePlain (BlockTag ann) where
plain :: Prism' (BlockTag ann) (Plain (BlockTag ann))
plain = (TaggedPlainBlock ann -> BlockTag ann)
-> (BlockTag ann -> Maybe (TaggedPlainBlock ann))
-> Prism
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' TaggedPlainBlock ann -> BlockTag ann
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain \case{ BlockTagPlain TaggedPlainBlock ann
x -> TaggedPlainBlock ann -> Maybe (TaggedPlainBlock ann)
forall a. a -> Maybe a
Just TaggedPlainBlock ann
x; BlockTag ann
_ -> Maybe (TaggedPlainBlock 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 TaggedBlocks p
x -> Optic' A_Lens NoIx (TaggedBlocks p) p -> TaggedBlocks p -> p
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (TaggedBlocks p) p
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation TaggedBlocks p
x
BlockTagPlain TaggedPlainBlock p
x -> Optic' A_Lens NoIx (TaggedPlainBlock p) p
-> TaggedPlainBlock p -> p
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx (TaggedPlainBlock p) p
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation TaggedPlainBlock p
x
g :: BlockTag ann -> ann -> BlockTag ann
g = \case
BlockTagFork TaggedBlocks ann
x -> \ann
a -> TaggedBlocks ann -> BlockTag ann
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork (TaggedBlocks ann -> BlockTag ann)
-> TaggedBlocks ann -> BlockTag ann
forall a b. (a -> b) -> a -> b
$ Optic A_Lens NoIx (TaggedBlocks ann) (TaggedBlocks ann) ann ann
-> ann -> TaggedBlocks ann -> TaggedBlocks 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 (TaggedBlocks ann) (TaggedBlocks ann) ann ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann
a TaggedBlocks ann
x
BlockTagPlain TaggedPlainBlock ann
x -> \ann
a -> TaggedPlainBlock ann -> BlockTag ann
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain (TaggedPlainBlock ann -> BlockTag ann)
-> TaggedPlainBlock ann -> BlockTag ann
forall a b. (a -> b) -> a -> b
$ Optic
A_Lens NoIx (TaggedPlainBlock ann) (TaggedPlainBlock ann) ann ann
-> ann -> TaggedPlainBlock ann -> TaggedPlainBlock 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 (TaggedPlainBlock ann) (TaggedPlainBlock ann) ann ann
forall x x'.
HasAnnotation x x' =>
Lens x x' (Annotation x) (Annotation x')
annotation ann
a TaggedPlainBlock 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 -> TaggedBlocks ann' -> BlockTag ann'
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork (TaggedBlocks ann' -> BlockTag ann')
-> f (TaggedBlocks ann') -> f (BlockTag ann')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
A_Traversal NoIx (TaggedBlocks ann) (TaggedBlocks ann') ann ann'
-> (ann -> f ann') -> TaggedBlocks ann -> f (TaggedBlocks 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 (TaggedBlocks ann) (TaggedBlocks ann') ann ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f TaggedBlocks ann
x
BlockTagPlain x -> TaggedPlainBlock ann' -> BlockTag ann'
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain (TaggedPlainBlock ann' -> BlockTag ann')
-> f (TaggedPlainBlock ann') -> f (BlockTag ann')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic
A_Traversal
NoIx
(TaggedPlainBlock ann)
(TaggedPlainBlock ann')
ann
ann'
-> (ann -> f ann')
-> TaggedPlainBlock ann
-> f (TaggedPlainBlock 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
(TaggedPlainBlock ann)
(TaggedPlainBlock ann')
ann
ann'
forall x x'.
HasManyAnnotations x x' =>
Traversal x x' (Annotation x) (Annotation x')
allAnnotations ann -> f ann'
f TaggedPlainBlock ann
x
instance HasManyMetadata (BlockTag ann) where
allMetadata :: Traversal' (BlockTag ann) Metadata
allMetadata = (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks 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)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
-> Optic
A_Lens
NoIx
(TaggedPlainBlock ann)
(TaggedPlainBlock 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
(TaggedPlainBlock ann)
(TaggedPlainBlock 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)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks ann)
(Paragraph ann)
(Paragraph ann)
forall x.
HasManyParagraphs x =>
Traversal' x (Paragraph (Annotation x))
allParagraphs
instance HasManyPlainBlocks (BlockTag ann) where
allPlainBlocks :: Traversal'
(BlockTag ann) (TaggedPlainBlock (Annotation (BlockTag ann)))
allPlainBlocks = (Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock 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
(TaggedBlocks ann)
(TaggedBlocks ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
forall x.
HasManyPlainBlocks x =>
Traversal' x (TaggedPlainBlock (Annotation x))
allPlainBlocks) Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
-> Optic' A_Prism NoIx (BlockTag ann) (TaggedPlainBlock ann)
-> Optic
A_Traversal
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock 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) (TaggedPlainBlock 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)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks 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)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks 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)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
-> Optic
A_Lens
NoIx
(TaggedPlainBlock ann)
(TaggedPlainBlock 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
(TaggedPlainBlock ann)
(TaggedPlainBlock 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)
(TaggedBlocks ann)
(TaggedBlocks ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
A_Prism
NoIx
(BlockTag ann)
(BlockTag ann)
(TaggedBlocks ann)
(TaggedBlocks ann)
-> Optic
A_Traversal
NoIx
(TaggedBlocks ann)
(TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks 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 TaggedBlocks ann
x -> Optic' A_Lens NoIx (TaggedBlocks ann) (Tag ann)
-> TaggedBlocks 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 (TaggedBlocks ann) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag TaggedBlocks ann
x
BlockTagPlain TaggedPlainBlock ann
x -> Optic' A_Lens NoIx (TaggedPlainBlock ann) (Tag ann)
-> TaggedPlainBlock 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 (TaggedPlainBlock ann) (Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag TaggedPlainBlock ann
x
g :: BlockTag ann -> Tag ann -> BlockTag ann
g = \case
BlockTagFork TaggedBlocks ann
x -> \Tag ann
a -> TaggedBlocks ann -> BlockTag ann
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork (Optic
A_Lens
NoIx
(TaggedBlocks ann)
(TaggedBlocks ann)
(Tag ann)
(Tag ann)
-> Tag ann -> TaggedBlocks ann -> TaggedBlocks 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
(TaggedBlocks ann)
(TaggedBlocks ann)
(Tag ann)
(Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
a TaggedBlocks ann
x)
BlockTagPlain TaggedPlainBlock ann
x -> \Tag ann
a -> TaggedPlainBlock ann -> BlockTag ann
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain (Optic
A_Lens
NoIx
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
(Tag ann)
(Tag ann)
-> Tag ann -> TaggedPlainBlock ann -> TaggedPlainBlock 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
(TaggedPlainBlock ann)
(TaggedPlainBlock ann)
(Tag ann)
(Tag ann)
forall x.
HasTag x =>
Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))
tag Tag ann
a TaggedPlainBlock 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 TaggedBlocks ann
x -> TaggedBlocks ann -> Block ann
forall ann. TaggedBlocks ann -> Block ann
BlockFork TaggedBlocks ann
x
BlockTagPlain TaggedPlainBlock ann
x -> TaggedPlainBlock ann -> Block ann
forall ann. TaggedPlainBlock ann -> Block ann
BlockPlain TaggedPlainBlock ann
x
g :: Block ann -> Maybe (BlockTag ann)
g = \case
BlockFork TaggedBlocks ann
x -> BlockTag ann -> Maybe (BlockTag ann)
forall a. a -> Maybe a
Just (TaggedBlocks ann -> BlockTag ann
forall ann. TaggedBlocks ann -> BlockTag ann
BlockTagFork TaggedBlocks ann
x)
BlockPlain TaggedPlainBlock ann
x -> BlockTag ann -> Maybe (BlockTag ann)
forall a. a -> Maybe a
Just (TaggedPlainBlock ann -> BlockTag ann
forall ann. TaggedPlainBlock ann -> BlockTag ann
BlockTagPlain TaggedPlainBlock ann
x)
Block ann
_ -> Maybe (BlockTag ann)
forall a. Maybe a
Nothing