module Prelude.Function where
open import Prelude.Level
open import Prelude.Notation
----------------------------------------------------------------------
-- Identity function
----------------------------------------------------------------------
instance
FuncIdentity : {l : Level}{A : Set l} → Identity (A → A)
id ⦃ FuncIdentity ⦄ x = x
----------------------------------------------------------------------
-- Non-dependent function composition
----------------------------------------------------------------------
instance
FuncComp :
{l m n : Level}
{A : Set l}
{B : Set m}
{C : Set n}
→ ---------------------------------
Composition (B → C) (A → B) (A → C)
_∘_ ⦃ FuncComp ⦄ g f x = g (f x)
----------------------------------------------------------------------
-- Dependent function composition
----------------------------------------------------------------------
infixr 5 _○_
_○_ :
{l m n : Level}
{A : Set l}
{B : A → Set m}
{C : (x : A) → B x → Set n}
(g : {x : A}(y : B x) → C x y)
(f : (x : A) → B x)
→ ----------------------------
(x : A) → C x (f x)
(g ○ f) x = g (f x)
----------------------------------------------------------------------
-- Case expressions
----------------------------------------------------------------------
infix 1 case_of_
case_of_ :
{l m : Level}
{A : Set l}
(x : A)
{B : A → Set m}
→ -------------------
((x : A) → B x) → B x
case x of f = f x
infix 1 case_returning_of_
case_returning_of_ :
{l m : Level}
{A : Set l}
(x : A)
(B : A → Set m)
→ -------------------
((x : A) → B x) → B x
case x returning _ of f = f x