summaryrefslogtreecommitdiff
path: root/src/Data/These/Decidable.idr
diff options
context:
space:
mode:
authorGreg Brown <greg.brown01@ed.ac.uk>2024-09-09 11:33:45 +0100
committerGreg Brown <greg.brown01@ed.ac.uk>2024-09-09 11:33:45 +0100
commit3a23bd851fc1a5d6e161dabc8a13f06bc8544a1d (patch)
tree301955e4e32dc7d5edafb98e7e373d439168e420 /src/Data/These/Decidable.idr
parent3da61a4ffb9cb2d535d518e70c6c90cd73cc3573 (diff)
Restart.
- use De Bruijn, as Namely, Painless had more pain than promised; - remove higher-kinded types; - provide ill-typing predicates; - prove substitution respects ill-typing;
Diffstat (limited to 'src/Data/These/Decidable.idr')
-rw-r--r--src/Data/These/Decidable.idr16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/Data/These/Decidable.idr b/src/Data/These/Decidable.idr
new file mode 100644
index 0000000..c044ca4
--- /dev/null
+++ b/src/Data/These/Decidable.idr
@@ -0,0 +1,16 @@
+module Data.These.Decidable
+
+import Data.Bool.Decidable
+import Data.These
+
+export
+viaEquivalence : a <=> b -> a `Reflects` x -> b `Reflects` x
+viaEquivalence eq (RTrue x) = RTrue (eq.leftToRight x)
+viaEquivalence eq (RFalse f) = RFalse (f . eq.rightToLeft)
+
+export
+reflectThese : a `Reflects` x -> b `Reflects` y -> These a b `Reflects` x || y
+reflectThese (RTrue x) (RTrue y) = RTrue (Both x y)
+reflectThese (RTrue x) (RFalse ny) = RTrue (This x)
+reflectThese (RFalse nx) (RTrue y) = RTrue (That y)
+reflectThese (RFalse nx) (RFalse ny) = RFalse (these nx ny $ const ny)