module Data.Irr where
Strict propositional truncationsπ
private variable
: Level
β : Type β A
In Agda, itβs possible to turn any type into one that definitionally has at most one inhabitant. We do this using a record containing an irrelevant field.
record Irr {β} (A : Type β) : Type β where
constructor forget
field
.lower : A
The most important property of this type is that, given any
in
the constant path refl
checks at
type
instance
: β {n} β H-Level (Irr A) (suc n)
H-Level-Irr {n} = prop-instance Ξ» _ _ β refl H-Level-Irr
instance
: β {β} {A : Type β} β¦ _ : A β¦ β Irr A
make-irr = forget x
make-irr β¦ x β¦ {-# INCOHERENT make-irr #-}
: Map (eff Irr)
Map-Irr = record { map = Ξ» where f (forget x) β forget (f x) } Map-Irr