module ProAbstract.Tagless.CanHaveTaglessContent
    ( CanHaveTaglessContent (..)
    ) where

import ProAbstract.Content
import ProAbstract.Structure
import ProAbstract.Tagless.CanBeTagless
import ProAbstract.Tagless.KindOfText

class CanHaveTaglessContent a where
    taglessContent :: KindOfText t -> AffineFold a t

instance CanHaveTaglessContent (Block ann) where
    taglessContent :: KindOfText t -> AffineFold (Block ann) t
taglessContent KindOfText t
s =
        (Optic
  A_Prism NoIx (Block ann) (Block ann) (BlockTag ann) (BlockTag ann)
forall a. IsTaggedOrBare a => Prism' a (TaggedType a)
tagged Optic
  A_Prism NoIx (Block ann) (Block ann) (BlockTag ann) (BlockTag ann)
-> Optic An_AffineFold NoIx (BlockTag ann) (BlockTag ann) t t
-> AffineFold (Block ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (BlockTag ann) (BlockTag ann) t t
forall a t.
CanHaveTaglessContent a =>
KindOfText t -> AffineFold a t
taglessContent @(BlockTag ann) KindOfText t
s) AffineFold (Block ann) t
-> AffineFold (Block ann) t -> AffineFold (Block ann) t
forall k l (is :: IxList) s a (js :: IxList).
(Is k An_AffineFold, Is l An_AffineFold) =>
Optic' k is s a -> Optic' l js s a -> AffineFold s a
`afailing`
        (Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
forall a. IsTaggedOrBare a => Prism' a (BareType a)
bare Optic
  A_Prism
  NoIx
  (Block ann)
  (Block ann)
  (Paragraph ann)
  (Paragraph ann)
-> Optic An_AffineFold NoIx (Paragraph ann) (Paragraph ann) t t
-> AffineFold (Block ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (Paragraph ann) (Paragraph ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless @(Paragraph ann) KindOfText t
s)

instance CanHaveTaglessContent (BlockTag ann) where
    taglessContent :: KindOfText t -> AffineFold (BlockTag ann) t
taglessContent KindOfText t
s =
        (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
     An_AffineFold
     NoIx
     (TaggedPlainBlock ann)
     (TaggedPlainBlock ann)
     t
     t
-> AffineFold (BlockTag ann) t
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
% KindOfText t
-> Optic
     An_AffineFold
     NoIx
     (TaggedPlainBlock ann)
     (TaggedPlainBlock ann)
     t
     t
forall a t.
CanHaveTaglessContent a =>
KindOfText t -> AffineFold a t
taglessContent @(TaggedPlainBlock ann) KindOfText t
s) AffineFold (BlockTag ann) t
-> AffineFold (BlockTag ann) t -> AffineFold (BlockTag ann) t
forall k l (is :: IxList) s a (js :: IxList).
(Is k An_AffineFold, Is l An_AffineFold) =>
Optic' k is s a -> Optic' l js s a -> AffineFold s a
`afailing`
        (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
     An_AffineFold NoIx (TaggedBlocks ann) (TaggedBlocks ann) t t
-> AffineFold (BlockTag ann) t
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
% KindOfText t
-> Optic
     An_AffineFold NoIx (TaggedBlocks ann) (TaggedBlocks ann) t t
forall a t.
CanHaveTaglessContent a =>
KindOfText t -> AffineFold a t
taglessContent @(TaggedBlocks ann) KindOfText t
s)

instance CanHaveTaglessContent (BlockTagContent ann) where
    taglessContent :: KindOfText t -> AffineFold (BlockTagContent ann) t
taglessContent = KindOfText t -> AffineFold (BlockTagContent ann) t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless

instance CanHaveTaglessContent (Inline ann) where
    taglessContent :: KindOfText t -> AffineFold (Inline ann) t
taglessContent KindOfText t
s =
        (Optic
  A_Prism
  NoIx
  (Inline ann)
  (Inline ann)
  (Fragment ann)
  (Fragment ann)
forall x. CanBePlain x => Prism' x (Plain x)
plain Optic
  A_Prism
  NoIx
  (Inline ann)
  (Inline ann)
  (Fragment ann)
  (Fragment ann)
-> Optic An_AffineFold NoIx (Fragment ann) (Fragment ann) t t
-> AffineFold (Inline ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (Fragment ann) (Fragment ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless KindOfText t
s) AffineFold (Inline ann) t
-> AffineFold (Inline ann) t -> AffineFold (Inline ann) t
forall k l (is :: IxList) s a (js :: IxList).
(Is k An_AffineFold, Is l An_AffineFold) =>
Optic' k is s a -> Optic' l js s a -> AffineFold s a
`afailing`
        (Optic
  A_Prism
  NoIx
  (Inline ann)
  (Inline ann)
  (TaggedLines ann)
  (TaggedLines ann)
forall x. CanFork x => Prism' x (Fork x)
fork Optic
  A_Prism
  NoIx
  (Inline ann)
  (Inline ann)
  (TaggedLines ann)
  (TaggedLines ann)
-> Optic An_AffineFold NoIx (TaggedLines ann) (TaggedLines ann) t t
-> AffineFold (Inline ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (TaggedLines ann) (TaggedLines ann) t t
forall a t.
CanHaveTaglessContent a =>
KindOfText t -> AffineFold a t
taglessContent KindOfText t
s)

instance CanHaveTaglessContent (Lines ann) where
    taglessContent :: KindOfText t -> AffineFold (Lines ann) t
taglessContent = KindOfText t -> AffineFold (Lines ann) t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless

instance CanHaveTaglessContent (Blocks ann) where
    taglessContent :: KindOfText t -> AffineFold (Blocks ann) t
taglessContent = KindOfText t -> AffineFold (Blocks ann) t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless

instance CanHaveTaglessContent (Line ann) where
    taglessContent :: KindOfText t -> AffineFold (Line ann) t
taglessContent = KindOfText t -> AffineFold (Line ann) t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless

instance CanHaveTaglessContent (Fragment ann) where
    taglessContent :: KindOfText t -> AffineFold (Fragment ann) t
taglessContent = KindOfText t -> AffineFold (Fragment ann) t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless

instance CanHaveTaglessContent (TaggedBlocks ann) where
    taglessContent :: KindOfText t -> AffineFold (TaggedBlocks ann) t
taglessContent KindOfText t
s = Optic
  A_Lens
  NoIx
  (TaggedBlocks ann)
  (TaggedBlocks ann)
  (Blocks ann)
  (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (TaggedBlocks ann)
  (TaggedBlocks ann)
  (Blocks ann)
  (Blocks ann)
-> Optic An_AffineFold NoIx (Blocks ann) (Blocks ann) t t
-> AffineFold (TaggedBlocks ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (Blocks ann) (Blocks ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless KindOfText t
s

instance CanHaveTaglessContent (TaggedPlainBlock ann) where
    taglessContent :: KindOfText t -> AffineFold (TaggedPlainBlock ann) t
taglessContent KindOfText t
s = Optic
  A_Lens
  NoIx
  (TaggedPlainBlock ann)
  (TaggedPlainBlock ann)
  (PlainBlock ann)
  (PlainBlock ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (TaggedPlainBlock ann)
  (TaggedPlainBlock ann)
  (PlainBlock ann)
  (PlainBlock ann)
-> Optic An_AffineFold NoIx (PlainBlock ann) (PlainBlock ann) t t
-> AffineFold (TaggedPlainBlock ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (PlainBlock ann) (PlainBlock ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless KindOfText t
s

instance CanHaveTaglessContent (TaggedLines ann) where
    taglessContent :: KindOfText t -> AffineFold (TaggedLines ann) t
taglessContent KindOfText t
s = Optic
  A_Lens
  NoIx
  (TaggedLines ann)
  (TaggedLines ann)
  (Lines ann)
  (Lines ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens
  NoIx
  (TaggedLines ann)
  (TaggedLines ann)
  (Lines ann)
  (Lines ann)
-> Optic An_AffineFold NoIx (Lines ann) (Lines ann) t t
-> AffineFold (TaggedLines ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (Lines ann) (Lines ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless KindOfText t
s

instance CanHaveTaglessContent (Document ann) where
    taglessContent :: KindOfText t -> AffineFold (Document ann) t
taglessContent KindOfText t
s = Optic
  A_Lens NoIx (Document ann) (Document ann) (Blocks ann) (Blocks ann)
forall x x'. HasContent x x' => Lens x x' (Content x) (Content x')
content Optic
  A_Lens NoIx (Document ann) (Document ann) (Blocks ann) (Blocks ann)
-> Optic An_AffineFold NoIx (Blocks ann) (Blocks ann) t t
-> AffineFold (Document ann) t
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
% KindOfText t
-> Optic An_AffineFold NoIx (Blocks ann) (Blocks ann) t t
forall a txt. CanBeTagless a => KindOfText txt -> AffineFold a txt
tagless KindOfText t
s