{-# OPTIONS --safe #-}

module Function.Reasoning where

open import Level

infixl 0 ⇒⟨∙⟩-syntax
⇒⟨∙⟩-syntax : {A : Type a} (B : Type b)  A  (A  B)  B
⇒⟨∙⟩-syntax _ x f = f x

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

infixl 0 ⇒⟨⟩-syntax
⇒⟨⟩-syntax : (A : Type a)  A  A
⇒⟨⟩-syntax _ x = x

syntax ⇒⟨⟩-syntax A x = x ⇒⟨⟩ A

-- private module Examples where
--   open import Prelude
--   example : (x y : ℕ) → x ≡ y → suc (suc x) ≡ ℕ.suc (suc y)
--   example x y p =
--     p ⦂ x ≡ y                   ⇒⟨ cong suc ⟩
--     suc x ≡ suc y               ⇒⟨ cong suc ⟩
--     suc (suc x) ≡ suc (suc y)   ⇒⟨⟩
--     suc (suc x) ≡ suc (suc y)