module Data.Atom where

open import Data.Nat.NP as Nat
open import Data.Bool
open import Data.List
open import Function
open import Relation.Binary.PropositionalEquality

module Internals where
  Atom : Set
  Atom = 

  _==ᴬ_ : (x y : Atom)  Bool
  _==ᴬ_ = Nat._==_

  _ᴬ :   Atom
  _ᴬ = id

  rmᴬ : Atom  List Atom  List Atom
  rmᴬ a []         = []
  rmᴬ a (x  xs)   = if a ==ᴬ x then rmᴬ a xs else x  rmᴬ a xs

  injᴬ :  {m n}  m   n   m  n
  injᴬ = id

abstract
  Atom : Set
  Atom = Internals.Atom

  _==ᴬ_ : (x y : Atom)  Bool
  _==ᴬ_ = Internals._==ᴬ_

  _ᴬ :   Atom
  _ᴬ = Internals._ᴬ

  rmᴬ : Atom  List Atom  List Atom
  rmᴬ = Internals.rmᴬ

  injᴬ :  {m n}  m   n   m  n
  injᴬ = Internals.injᴬ