IdrisDoc: Data.So

Data.So

data So : Bool -> Type

Ensure that some run-time Boolean test has been performed.

This lifts a Boolean predicate to the type level. See the function choose
if you need to perform a Boolean test and convince the type checker of this
fact.

If you find yourself using So for something other than primitive types,
it may be appropriate to define a type of evidence for the property that you
care about instead.

Oh : So True
choose : (b : Bool) -> Either (So b) (So (not b))

Perform a case analysis on a Boolean, providing clients with a So proof

soAbsurd : So b -> So (not b) -> Void

Absurd when you have proof that both b and not b is true.

soNotToNotSo : So (not b) -> Not (So b)

Transmission between usage of value-level not and type-level Not.