-- | A class for plain `Data.Kind.Type` equivalents
-- for the simple forms of 'AST.Knot.Knot's.
--
-- Useful for succinct tests, examples, and for debug prints.

{-# LANGUAGE FlexibleContexts #-}

module AST.Class.HasPlain
    ( KHasPlain(..)
    ) where

import AST.Knot (Tree)
import AST.Knot.Pure (Pure)
import Control.Lens (Iso')

import Prelude.Compat

-- | A class for a plain for of a @Tree Pure k@
class Show (KPlain k) => KHasPlain k where
    -- | Plain form data type
    data KPlain k
    -- | An 'Control.Lens.Iso' between the plain and knotted forms
    kPlain :: Iso' (KPlain k) (Tree Pure k)