summaryrefslogtreecommitdiff
path: root/src/Data/These/Decidable.idr
blob: c044ca46c03f4b05bb96947db2b5d47e9d2db433 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)