diff options
author | Greg Brown <greg.brown01@ed.ac.uk> | 2024-09-09 11:33:45 +0100 |
---|---|---|
committer | Greg Brown <greg.brown01@ed.ac.uk> | 2024-09-09 11:33:45 +0100 |
commit | 3a23bd851fc1a5d6e161dabc8a13f06bc8544a1d (patch) | |
tree | 301955e4e32dc7d5edafb98e7e373d439168e420 /src/Data/These | |
parent | 3da61a4ffb9cb2d535d518e70c6c90cd73cc3573 (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')
-rw-r--r-- | src/Data/These/Decidable.idr | 16 |
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) |