{-# 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))