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