module Plutarch.Builtin.Opaque (
  POpaque (POpaque),
  popaque,
) where

import Plutarch.Internal.Term (Term, punsafeCoerce)

-- | An Arbitrary Term with an unknown type
newtype POpaque s = POpaque (Term s POpaque)

-- | Erase the type of a Term
popaque :: Term s a -> Term s POpaque
popaque :: forall (s :: S) (a :: S -> Type). Term s a -> Term s POpaque
popaque = Term s a -> Term s POpaque
forall (b :: S -> Type) (a :: S -> Type) (s :: S).
Term s a -> Term s b
punsafeCoerce