{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
module Plutarch.Builtin.Data (
PData (PData),
PAsData (PAsData),
pchooseData,
pasConstr,
pasMap,
plistData,
pasList,
pasInt,
pasByteStr,
pserialiseData,
pconstrBuiltin,
PBuiltinPair (PBuiltinPair),
pfstBuiltin,
psndBuiltin,
ppairDataBuiltin,
PBuiltinList (PCons, PNil),
pheadBuiltin,
ptailBuiltin,
pheadTailBuiltin,
pchooseListBuiltin,
pnullBuiltin,
pconsBuiltin,
) where
import Data.Kind (Type)
import Plutarch.Builtin.Bool (PBool)
import Plutarch.Builtin.ByteString (PByteString)
import Plutarch.Builtin.Integer (PInteger)
import Plutarch.Builtin.Opaque (popaque)
import Plutarch.Internal.Case (punsafeCase)
import Plutarch.Internal.PLam (plam)
import Plutarch.Internal.Term (
S,
Term,
pforce,
phoistAcyclic,
punsafeBuiltin,
(:-->),
)
import PlutusCore qualified as PLC
newtype PData (s :: S) = PData (Term s PData)
newtype PAsData (a :: S -> Type) (s :: S) = PAsData (Term s a)
pchooseData :: Term s (PData :--> a :--> a :--> a :--> a :--> a :--> a)
pchooseData :: forall (s :: S) (a :: S -> Type).
Term s (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a))))))
pchooseData = (forall (s' :: S).
Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a))))))
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S).
Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> (forall (s' :: S).
Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a))))))
forall a b. (a -> b) -> a -> b
$ Term
s'
(PDelayed
(PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a))))))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term
s'
(PDelayed
(PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s'
(PDelayed
(PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
-> Term
s' (PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a))))))
forall a b. (a -> b) -> a -> b
$ DefaultFun
-> Term
s'
(PDelayed
(PData :--> (a :--> (a :--> (a :--> (a :--> (a :--> a)))))))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.ChooseData
pasConstr :: Term s (PData :--> PBuiltinPair PInteger (PBuiltinList PData))
pasConstr :: forall (s :: S).
Term s (PData :--> PBuiltinPair PInteger (PBuiltinList PData))
pasConstr = DefaultFun
-> Term s (PData :--> PBuiltinPair PInteger (PBuiltinList PData))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.UnConstrData
pasMap :: Term s (PData :--> PBuiltinList (PBuiltinPair PData PData))
pasMap :: forall (s :: S).
Term s (PData :--> PBuiltinList (PBuiltinPair PData PData))
pasMap = DefaultFun
-> Term s (PData :--> PBuiltinList (PBuiltinPair PData PData))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.UnMapData
plistData :: Term s (PBuiltinList PData :--> PData)
plistData :: forall (s :: S). Term s (PBuiltinList PData :--> PData)
plistData = DefaultFun -> Term s (PBuiltinList PData :--> PData)
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.ListData
pasList :: Term s (PData :--> PBuiltinList PData)
pasList :: forall (s :: S). Term s (PData :--> PBuiltinList PData)
pasList = DefaultFun -> Term s (PData :--> PBuiltinList PData)
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.UnListData
pasInt :: Term s (PData :--> PInteger)
pasInt :: forall (s :: S). Term s (PData :--> PInteger)
pasInt = DefaultFun -> Term s (PData :--> PInteger)
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.UnIData
pasByteStr :: Term s (PData :--> PByteString)
pasByteStr :: forall (s :: S). Term s (PData :--> PByteString)
pasByteStr = DefaultFun -> Term s (PData :--> PByteString)
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.UnBData
pserialiseData :: Term s (PData :--> PByteString)
pserialiseData :: forall (s :: S). Term s (PData :--> PByteString)
pserialiseData = DefaultFun -> Term s (PData :--> PByteString)
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.SerialiseData
pconstrBuiltin :: Term s (PInteger :--> PBuiltinList PData :--> PAsData (PBuiltinPair PInteger (PBuiltinList PData)))
pconstrBuiltin :: forall (s :: S).
Term
s
(PInteger
:--> (PBuiltinList PData
:--> PAsData (PBuiltinPair PInteger (PBuiltinList PData))))
pconstrBuiltin = DefaultFun
-> Term
s
(PInteger
:--> (PBuiltinList PData
:--> PAsData (PBuiltinPair PInteger (PBuiltinList PData))))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.ConstrData
data PBuiltinPair (a :: S -> Type) (b :: S -> Type) (s :: S)
= PBuiltinPair (Term s a) (Term s b)
{-# DEPRECATED pfstBuiltin "Use pmatch instead" #-}
pfstBuiltin :: Term s (PBuiltinPair a b :--> a)
pfstBuiltin :: forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s (PBuiltinPair a b :--> a)
pfstBuiltin = (forall (s' :: S). Term s' (PBuiltinPair a b :--> a))
-> Term s (PBuiltinPair a b :--> a)
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S). Term s' (PBuiltinPair a b :--> a))
-> Term s (PBuiltinPair a b :--> a))
-> (forall (s' :: S). Term s' (PBuiltinPair a b :--> a))
-> Term s (PBuiltinPair a b :--> a)
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinPair a b :--> a))
-> Term s' (PBuiltinPair a b :--> a)
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinPair a b :--> a))
-> Term s' (PBuiltinPair a b :--> a))
-> (DefaultFun -> Term s' (PDelayed (PBuiltinPair a b :--> a)))
-> DefaultFun
-> Term s' (PBuiltinPair a b :--> a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> a)))
-> Term s' (PDelayed (PBuiltinPair a b :--> a))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> a)))
-> Term s' (PDelayed (PBuiltinPair a b :--> a)))
-> (DefaultFun
-> Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> a))))
-> DefaultFun
-> Term s' (PDelayed (PBuiltinPair a b :--> a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DefaultFun
-> Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> a)))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin (DefaultFun -> Term s' (PBuiltinPair a b :--> a))
-> DefaultFun -> Term s' (PBuiltinPair a b :--> a)
forall a b. (a -> b) -> a -> b
$ DefaultFun
PLC.FstPair
{-# DEPRECATED psndBuiltin "Use pmatch instead" #-}
psndBuiltin :: Term s (PBuiltinPair a b :--> b)
psndBuiltin :: forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s (PBuiltinPair a b :--> b)
psndBuiltin = (forall (s' :: S). Term s' (PBuiltinPair a b :--> b))
-> Term s (PBuiltinPair a b :--> b)
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S). Term s' (PBuiltinPair a b :--> b))
-> Term s (PBuiltinPair a b :--> b))
-> (forall (s' :: S). Term s' (PBuiltinPair a b :--> b))
-> Term s (PBuiltinPair a b :--> b)
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinPair a b :--> b))
-> Term s' (PBuiltinPair a b :--> b)
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinPair a b :--> b))
-> Term s' (PBuiltinPair a b :--> b))
-> (DefaultFun -> Term s' (PDelayed (PBuiltinPair a b :--> b)))
-> DefaultFun
-> Term s' (PBuiltinPair a b :--> b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> b)))
-> Term s' (PDelayed (PBuiltinPair a b :--> b))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> b)))
-> Term s' (PDelayed (PBuiltinPair a b :--> b)))
-> (DefaultFun
-> Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> b))))
-> DefaultFun
-> Term s' (PDelayed (PBuiltinPair a b :--> b))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DefaultFun
-> Term s' (PDelayed (PDelayed (PBuiltinPair a b :--> b)))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin (DefaultFun -> Term s' (PBuiltinPair a b :--> b))
-> DefaultFun -> Term s' (PBuiltinPair a b :--> b)
forall a b. (a -> b) -> a -> b
$ DefaultFun
PLC.SndPair
ppairDataBuiltin :: Term s (PAsData a :--> PAsData b :--> PBuiltinPair (PAsData a) (PAsData b))
ppairDataBuiltin :: forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term
s
(PAsData a
:--> (PAsData b :--> PBuiltinPair (PAsData a) (PAsData b)))
ppairDataBuiltin = DefaultFun
-> Term
s
(PAsData a
:--> (PAsData b :--> PBuiltinPair (PAsData a) (PAsData b)))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.MkPairData
data PBuiltinList (a :: S -> Type) (s :: S)
= PCons (Term s a) (Term s (PBuiltinList a))
| PNil
pheadBuiltin :: Term s (PBuiltinList a :--> a)
pheadBuiltin :: forall (s :: S) (a :: S -> Type). Term s (PBuiltinList a :--> a)
pheadBuiltin = (forall (s' :: S). Term s' (PBuiltinList a :--> a))
-> Term s (PBuiltinList a :--> a)
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S). Term s' (PBuiltinList a :--> a))
-> Term s (PBuiltinList a :--> a))
-> (forall (s' :: S). Term s' (PBuiltinList a :--> a))
-> Term s (PBuiltinList a :--> a)
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinList a :--> a))
-> Term s' (PBuiltinList a :--> a)
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinList a :--> a))
-> Term s' (PBuiltinList a :--> a))
-> Term s' (PDelayed (PBuiltinList a :--> a))
-> Term s' (PBuiltinList a :--> a)
forall a b. (a -> b) -> a -> b
$ DefaultFun -> Term s' (PDelayed (PBuiltinList a :--> a))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.HeadList
ptailBuiltin :: Term s (PBuiltinList a :--> PBuiltinList a)
ptailBuiltin :: forall (s :: S) (a :: S -> Type).
Term s (PBuiltinList a :--> PBuiltinList a)
ptailBuiltin = (forall (s' :: S). Term s' (PBuiltinList a :--> PBuiltinList a))
-> Term s (PBuiltinList a :--> PBuiltinList a)
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S). Term s' (PBuiltinList a :--> PBuiltinList a))
-> Term s (PBuiltinList a :--> PBuiltinList a))
-> (forall (s' :: S). Term s' (PBuiltinList a :--> PBuiltinList a))
-> Term s (PBuiltinList a :--> PBuiltinList a)
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinList a :--> PBuiltinList a))
-> Term s' (PBuiltinList a :--> PBuiltinList a)
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinList a :--> PBuiltinList a))
-> Term s' (PBuiltinList a :--> PBuiltinList a))
-> Term s' (PDelayed (PBuiltinList a :--> PBuiltinList a))
-> Term s' (PBuiltinList a :--> PBuiltinList a)
forall a b. (a -> b) -> a -> b
$ DefaultFun
-> Term s' (PDelayed (PBuiltinList a :--> PBuiltinList a))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.TailList
pheadTailBuiltin ::
forall (a :: S -> Type) (b :: S -> Type) (s :: S).
Term s (PBuiltinList a) ->
(Term s a -> Term s (PBuiltinList a) -> Term s b) ->
Term s b
pheadTailBuiltin :: forall (a :: S -> Type) (b :: S -> Type) (s :: S).
Term s (PBuiltinList a)
-> (Term s a -> Term s (PBuiltinList a) -> Term s b) -> Term s b
pheadTailBuiltin Term s (PBuiltinList a)
ell Term s a -> Term s (PBuiltinList a) -> Term s b
handler = Term s (PBuiltinList a) -> [Term s POpaque] -> Term s b
forall (a :: S -> Type) (b :: S -> Type) (s :: S).
Term s a -> [Term s POpaque] -> Term s b
punsafeCase Term s (PBuiltinList a)
ell [Term s (a :--> (PBuiltinList a :--> b)) -> Term s POpaque
forall (s :: S) (a :: S -> Type). Term s a -> Term s POpaque
popaque (Term s (a :--> (PBuiltinList a :--> b)) -> Term s POpaque)
-> ((Term s a -> Term s (PBuiltinList a) -> Term s b)
-> Term s (a :--> (PBuiltinList a :--> b)))
-> (Term s a -> Term s (PBuiltinList a) -> Term s b)
-> Term s POpaque
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Term s a -> Term s (PBuiltinList a) -> Term s b)
-> Term s (a :--> (PBuiltinList a :--> b))
forall a (b :: S -> Type) (s :: S) (c :: S -> Type).
(PLamN a b s, HasCallStack) =>
(Term s c -> a) -> Term s (c :--> b)
forall (c :: S -> Type).
HasCallStack =>
(Term s c -> Term s (PBuiltinList a) -> Term s b)
-> Term s (c :--> (PBuiltinList a :--> b))
plam ((Term s a -> Term s (PBuiltinList a) -> Term s b)
-> Term s POpaque)
-> (Term s a -> Term s (PBuiltinList a) -> Term s b)
-> Term s POpaque
forall a b. (a -> b) -> a -> b
$ Term s a -> Term s (PBuiltinList a) -> Term s b
handler]
pchooseListBuiltin :: Term s (PBuiltinList a :--> b :--> b :--> b)
pchooseListBuiltin :: forall (s :: S) (a :: S -> Type) (b :: S -> Type).
Term s (PBuiltinList a :--> (b :--> (b :--> b)))
pchooseListBuiltin = (forall (s' :: S).
Term s' (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s (PBuiltinList a :--> (b :--> (b :--> b)))
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S).
Term s' (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s (PBuiltinList a :--> (b :--> (b :--> b))))
-> (forall (s' :: S).
Term s' (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s (PBuiltinList a :--> (b :--> (b :--> b)))
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s' (PBuiltinList a :--> (b :--> (b :--> b)))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s' (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b))))
-> Term s' (PBuiltinList a :--> (b :--> (b :--> b)))
forall a b. (a -> b) -> a -> b
$ Term
s' (PDelayed (PDelayed (PBuiltinList a :--> (b :--> (b :--> b)))))
-> Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b))))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term
s' (PDelayed (PDelayed (PBuiltinList a :--> (b :--> (b :--> b)))))
-> Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b)))))
-> Term
s' (PDelayed (PDelayed (PBuiltinList a :--> (b :--> (b :--> b)))))
-> Term s' (PDelayed (PBuiltinList a :--> (b :--> (b :--> b))))
forall a b. (a -> b) -> a -> b
$ DefaultFun
-> Term
s' (PDelayed (PDelayed (PBuiltinList a :--> (b :--> (b :--> b)))))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.ChooseList
pnullBuiltin :: Term s (PBuiltinList a :--> PBool)
pnullBuiltin :: forall (s :: S) (a :: S -> Type).
Term s (PBuiltinList a :--> PBool)
pnullBuiltin = (forall (s' :: S). Term s' (PBuiltinList a :--> PBool))
-> Term s (PBuiltinList a :--> PBool)
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S). Term s' (PBuiltinList a :--> PBool))
-> Term s (PBuiltinList a :--> PBool))
-> (forall (s' :: S). Term s' (PBuiltinList a :--> PBool))
-> Term s (PBuiltinList a :--> PBool)
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (PBuiltinList a :--> PBool))
-> Term s' (PBuiltinList a :--> PBool)
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (PBuiltinList a :--> PBool))
-> Term s' (PBuiltinList a :--> PBool))
-> Term s' (PDelayed (PBuiltinList a :--> PBool))
-> Term s' (PBuiltinList a :--> PBool)
forall a b. (a -> b) -> a -> b
$ DefaultFun -> Term s' (PDelayed (PBuiltinList a :--> PBool))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.NullList
pconsBuiltin :: Term s (a :--> PBuiltinList a :--> PBuiltinList a)
pconsBuiltin :: forall (s :: S) (a :: S -> Type).
Term s (a :--> (PBuiltinList a :--> PBuiltinList a))
pconsBuiltin = (forall (s' :: S).
Term s' (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s (a :--> (PBuiltinList a :--> PBuiltinList a))
forall (a :: S -> Type) (s :: S).
HasCallStack =>
(forall (s' :: S). Term s' a) -> Term s a
phoistAcyclic ((forall (s' :: S).
Term s' (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> (forall (s' :: S).
Term s' (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s (a :--> (PBuiltinList a :--> PBuiltinList a))
forall a b. (a -> b) -> a -> b
$ Term s' (PDelayed (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s' (a :--> (PBuiltinList a :--> PBuiltinList a))
forall (s :: S) (a :: S -> Type). Term s (PDelayed a) -> Term s a
pforce (Term s' (PDelayed (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s' (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s' (PDelayed (a :--> (PBuiltinList a :--> PBuiltinList a)))
-> Term s' (a :--> (PBuiltinList a :--> PBuiltinList a))
forall a b. (a -> b) -> a -> b
$ DefaultFun
-> Term s' (PDelayed (a :--> (PBuiltinList a :--> PBuiltinList a)))
forall (s :: S) (a :: S -> Type). DefaultFun -> Term s a
punsafeBuiltin DefaultFun
PLC.MkCons