{-# LANGUAGE OverloadedStrings #-} module PlutusCore.Examples.Data.Function ( unsafeCoerce ) where import PlutusCore.Core import PlutusCore.MkPlc import PlutusCore.Name.Unique import PlutusCore.Quote import PlutusCore.StdLib.Data.Function unsafeCoerce :: Term TyName Name uni fun () unsafeCoerce :: forall (uni :: * -> *) fun. Term TyName Name uni fun () unsafeCoerce = Quote (Term TyName Name uni fun ()) -> Term TyName Name uni fun () forall a. Quote a -> a runQuote (Quote (Term TyName Name uni fun ()) -> Term TyName Name uni fun ()) -> Quote (Term TyName Name uni fun ()) -> Term TyName Name uni fun () forall a b. (a -> b) -> a -> b $ do TyName a <- Text -> QuoteT Identity TyName forall (m :: * -> *). MonadQuote m => Text -> m TyName freshTyName Text "a" TyName b <- Text -> QuoteT Identity TyName forall (m :: * -> *). MonadQuote m => Text -> m TyName freshTyName Text "b" Term TyName Name uni fun () -> Quote (Term TyName Name uni fun ()) forall a. a -> QuoteT Identity a forall (m :: * -> *) a. Monad m => a -> m a return (Term TyName Name uni fun () -> Quote (Term TyName Name uni fun ())) -> (Type TyName uni () -> Term TyName Name uni fun ()) -> Type TyName uni () -> Quote (Term TyName Name uni fun ()) forall b c a. (b -> c) -> (a -> b) -> a -> c . () -> TyName -> Kind () -> Term TyName Name uni fun () -> Term TyName Name uni fun () forall tyname name (uni :: * -> *) fun ann. ann -> tyname -> Kind ann -> Term tyname name uni fun ann -> Term tyname name uni fun ann TyAbs () TyName a (() -> Kind () forall ann. ann -> Kind ann Type ()) (Term TyName Name uni fun () -> Term TyName Name uni fun ()) -> (Type TyName uni () -> Term TyName Name uni fun ()) -> Type TyName uni () -> Term TyName Name uni fun () forall b c a. (b -> c) -> (a -> b) -> a -> c . () -> TyName -> Kind () -> Term TyName Name uni fun () -> Term TyName Name uni fun () forall tyname name (uni :: * -> *) fun ann. ann -> tyname -> Kind ann -> Term tyname name uni fun ann -> Term tyname name uni fun ann TyAbs () TyName b (() -> Kind () forall ann. ann -> Kind ann Type ()) (Term TyName Name uni fun () -> Term TyName Name uni fun ()) -> (Type TyName uni () -> Term TyName Name uni fun ()) -> Type TyName uni () -> Term TyName Name uni fun () forall b c a. (b -> c) -> (a -> b) -> a -> c . () -> Term TyName Name uni fun () -> Term TyName Name uni fun () -> Term TyName Name uni fun () forall tyname name (uni :: * -> *) fun ann. ann -> Term tyname name uni fun ann -> Term tyname name uni fun ann -> Term tyname name uni fun ann Apply () (Term TyName Name uni fun () -> [Type TyName uni ()] -> Term TyName Name uni fun () forall (term :: * -> *) tyname name (uni :: * -> *) fun. TermLike term tyname name uni fun => term () -> [Type tyname uni ()] -> term () mkIterInstNoAnn Term TyName Name uni fun () forall (term :: * -> *) (uni :: * -> *) fun. TermLike term TyName Name uni fun => term () fix [() -> TyName -> Type TyName uni () forall tyname (uni :: * -> *) ann. ann -> tyname -> Type tyname uni ann TyVar () TyName a, () -> TyName -> Type TyName uni () forall tyname (uni :: * -> *) ann. ann -> tyname -> Type tyname uni ann TyVar () TyName b]) (Term TyName Name uni fun () -> Term TyName Name uni fun ()) -> (Type TyName uni () -> Term TyName Name uni fun ()) -> Type TyName uni () -> Term TyName Name uni fun () forall b c a. (b -> c) -> (a -> b) -> a -> c . () -> Term TyName Name uni fun () -> Type TyName uni () -> Term TyName Name uni fun () forall tyname name (uni :: * -> *) fun ann. ann -> Term tyname name uni fun ann -> Type tyname uni ann -> Term tyname name uni fun ann TyInst () Term TyName Name uni fun () forall (term :: * -> *) (uni :: * -> *) fun. TermLike term TyName Name uni fun => term () idFun (Type TyName uni () -> Quote (Term TyName Name uni fun ())) -> Type TyName uni () -> Quote (Term TyName Name uni fun ()) forall a b. (a -> b) -> a -> b $ () -> Type TyName uni () -> Type TyName uni () -> Type TyName uni () forall tyname (uni :: * -> *) ann. ann -> Type tyname uni ann -> Type tyname uni ann -> Type tyname uni ann TyFun () (() -> TyName -> Type TyName uni () forall tyname (uni :: * -> *) ann. ann -> tyname -> Type tyname uni ann TyVar () TyName a) (() -> TyName -> Type TyName uni () forall tyname (uni :: * -> *) ann. ann -> tyname -> Type tyname uni ann TyVar () TyName b)