module ProAbstract.Tag.HasTag
    ( HasTag (..)
    ) where

import ProAbstract.Annotation
import ProAbstract.Tag.TagType

class HasTag x where
    type TagOpticKind x :: OpticKind
    tag :: Optic' (TagOpticKind x) NoIx x (Tag (Annotation x))

instance HasTag (Tag ann) where
    type TagOpticKind (Tag ann) = A_Lens
    tag :: Optic'
  (TagOpticKind (Tag ann))
  NoIx
  (Tag ann)
  (Tag (Annotation (Tag ann)))
tag = Optic An_Iso NoIx (Tag ann) (Tag ann) (Tag ann) (Tag ann)
-> Optic A_Lens NoIx (Tag ann) (Tag ann) (Tag ann) (Tag 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 (Tag ann) (Tag ann) (Tag ann) (Tag ann)
forall a. Iso' a a
simple