summaryrefslogtreecommitdiff
path: root/src/CC
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2023-03-25 15:35:43 +0000
committerChloe Brown <chloe.brown.00@outlook.com>2023-03-25 15:35:43 +0000
commit2af2175f6b633f717c0fb64e05310a294fe168a8 (patch)
treec32c165feba9d28551351e157dbbb84329ee05d5 /src/CC
parentb97d796c45a4ffdb475c03330c62ff8be2911d85 (diff)
Extract Name to a new module.
Diffstat (limited to 'src/CC')
-rw-r--r--src/CC/Name.idr67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/CC/Name.idr b/src/CC/Name.idr
new file mode 100644
index 0000000..f1a66db
--- /dev/null
+++ b/src/CC/Name.idr
@@ -0,0 +1,67 @@
+module CC.Name
+
+import Control.Relation
+
+import Decidable.Equality
+
+import Text.Bounded
+import Text.PrettyPrint.Prettyprinter
+
+infix 4 ~~
+
+-- Definitions -----------------------------------------------------------------
+
+||| Names of variables.
+export
+Name : Type
+Name = WithBounds String
+
+%name Name n, m
+
+||| Equivalence relation on names.
+export
+(~~) : Rel Name
+m ~~ n = m.val = n.val
+
+%name (~~) prf
+
+-- Interfaces ------------------------------------------------------------------
+
+export
+Interpolation Name where
+ interpolate n = n.val
+
+export
+Pretty Name where
+ pretty n = pretty n.val
+
+export
+Reflexive Name (~~) where
+ reflexive = Refl
+
+export
+Symmetric Name (~~) where
+ symmetric prf = sym prf
+
+export
+Transitive Name (~~) where
+ transitive prf1 prf2 = trans prf1 prf2
+
+export Equivalence Name (~~) where
+
+-- Operations ------------------------------------------------------------------
+
+||| Constructs a new name from a bounded String.
+export
+MkName : WithBounds String -> Name
+MkName = id
+
+||| Decides if two names are equivalent
+export
+decEquiv : (m, n : Name) -> Dec (m ~~ n)
+decEquiv m n = decEq m.val n.val
+
+||| Returns the bounds of `name`, if any.
+export
+bounds : (name : Name) -> Maybe Bounds
+bounds name = if name.isIrrelevant then Nothing else Just name.bounds