module Plutarch.Unsafe (
  PI.punsafeBuiltin,
  PI.punsafeCoerce,
  PI.punsafeConstant,
  punsafeDowncast,
) where

import Plutarch.Internal (Term)
import Plutarch.Internal qualified as PI
import Plutarch.Internal.PlutusType (PInner)

{- |
  Unsafely coerce from the 'PInner' representation of a Term,
  assuming that the value is a safe construction of the Term.
-}
punsafeDowncast :: Term s (PInner a) -> Term s a
punsafeDowncast :: forall (s :: S) (a :: PType). Term s (PInner a) -> Term s a
punsafeDowncast = forall (s :: S) (a :: PType) (b :: PType). Term s a -> Term s b
PI.punsafeCoerce