------------------------------------------------------------------------ -- The Agda standard library -- -- Wrapper for the proof irrelevance modality -- -- This allows us to store proof irrelevant witnesses in a record and -- use projections to manipulate them without having to turn on the -- unsafe option --irrelevant-projections. -- Cf. Data.Refinement for a use case ------------------------------------------------------------------------ {-# OPTIONS --cubical-compatible --safe #-} module Data.Irrelevant where open import Level using (Level) private variable a b c : Level A : Set a B : Set b C : Set c ------------------------------------------------------------------------ -- Type record Irrelevant (A : Set a) : Set a where constructor [_] field .irrelevant : A open Irrelevant public ------------------------------------------------------------------------ -- Algebraic structure: Functor, Appplicative and Monad-like map : (A B) Irrelevant A Irrelevant B map f [ a ] = [ f a ] pure : A Irrelevant A pure x = [ x ] infixl 4 _<*>_ _<*>_ : Irrelevant (A B) Irrelevant A Irrelevant B [ f ] <*> [ a ] = [ f a ] infixl 1 _>>=_ _>>=_ : Irrelevant A (.A Irrelevant B) Irrelevant B [ a ] >>= f = f a ------------------------------------------------------------------------ -- Other functions zipWith : (A B C) Irrelevant A Irrelevant B Irrelevant C zipWith f a b = f a b