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.
Perform a case analysis on a Boolean, providing clients with a So
proof
Absurd when you have proof that both b
and not b
is true.
Transmission between usage of value-level not
and type-level Not
.