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

module Strict where

open import Agda.Builtin.Strict public
open import Level

infixr 0 _$!_
_$!_ : {A : Type a} {B : A  Type b}  (∀ x  B x)   x  B x
f $! x = primForce x f
{-# INLINE _$!_ #-}

infixr 0 let-bang
let-bang : {A : Type a} {B : A  Type b}   x  (∀ x  B x)  B x
let-bang = primForce
{-# INLINE let-bang #-}

syntax let-bang v  x  e) = let! x =! v in! e

infixr 0 lambda-bang
lambda-bang : {A : Type a} {B : A  Type b}  (∀ x  B x)   x  B x
lambda-bang f x = primForce x f
{-# INLINE lambda-bang #-}

syntax lambda-bang  x  e) = λ! x →! e