{-# OPTIONS --without-K --safe #-}

module Function.Reasoning where

open import Level

infixr 2 _⟨⟩⇒_ ⟨∙⟩⇒-syntax

⟨∙⟩⇒-syntax : ∀ (A : Type a) → (B → C) → (A → B) → A → C
⟨∙⟩⇒-syntax _ f g x = f (g x)

syntax ⟨∙⟩⇒-syntax A f g = A ⟨ g ⟩⇒ f

_⟨⟩⇒_ : ∀ (A : Type a) → (A → B) → A → B
_ ⟨⟩⇒ f = f

infix 2.5 _⇒∎
_⇒∎ : (A : Type a) → A → A
_⇒∎ _ x = x

infixr 1.5 [_]⇒_
[_]⇒_ : A → (A → B) → B
[ x ]⇒ f = f x

-- infix 2.5 _⇒[_]
-- _⇒[_] : (A : Type a) → A → A
-- _ ⇒[ x ] = x