{-# OPTIONS --cubical --safe #-}
module Classical where
open import Prelude
open import Relation.Nullary.Stable using (Stable) public
open import Relation.Nullary.Decidable.Properties using (Dec→Stable) public
Classical : Type a → Type a
Classical A = ¬ ¬ A
pure : A → Classical A
pure x k = k x
_>>=_ : Classical A → (A → Classical B) → Classical B
xs >>= f = λ k → xs λ x → f x k
_<*>_ : Classical (A → B) → Classical A → Classical B
fs <*> xs = λ k → fs λ f → xs λ x → k (f x)
lem : {A : Type a} → Classical (Dec A)
lem k = k (no (k ∘ yes))