Skip to content

Add makeIsDataAsList for generating IsData instances that uses List internally #7121

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions plutus-tx-plugin/test/IsData/9.6/MyMonoData.th.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
instance PlutusTx.IsData.Class.ToData Plugin.Data.Spec.MyMonoData
where {{-# INLINABLE PlutusTx.IsData.Class.toBuiltinData #-};
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.Mono1 arg_0
arg_1) = PlutusTx.Builtins.Internal.mkConstr (0 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_0) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_1) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval)))
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.Mono2 arg_2) = PlutusTx.Builtins.Internal.mkConstr (1 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_2) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval))
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.Mono3 arg_3) = PlutusTx.Builtins.Internal.mkConstr (2 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_3) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval))}
instance PlutusTx.IsData.Class.FromData Plugin.Data.Spec.MyMonoData
where {{-# INLINABLE PlutusTx.IsData.Class.fromBuiltinData #-};
PlutusTx.IsData.Class.fromBuiltinData d_4 = let constrFun_5 (!index_6) (!args_7) = case (index_6,
args_7) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.uncons -> GHC.Maybe.Just ((PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_8),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_9))))) -> GHC.Maybe.Just (Plugin.Data.Spec.Mono1 arg_8 arg_9);
(((PlutusTx.Eq.==) (1 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_10))) -> GHC.Maybe.Just (Plugin.Data.Spec.Mono2 arg_10);
(((PlutusTx.Eq.==) (2 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_11))) -> GHC.Maybe.Just (Plugin.Data.Spec.Mono3 arg_11);
_ -> GHC.Maybe.Nothing}
in PlutusTx.Builtins.matchData' d_4 constrFun_5 (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing)}
instance PlutusTx.IsData.Class.UnsafeFromData Plugin.Data.Spec.MyMonoData
where {{-# INLINABLE PlutusTx.IsData.Class.unsafeFromBuiltinData #-};
PlutusTx.IsData.Class.unsafeFromBuiltinData d_12 = let {!tup_13 = PlutusTx.Builtins.Internal.unsafeDataAsConstr d_12;
!index_14 = PlutusTx.Builtins.Internal.fst tup_13;
!args_15 = PlutusTx.Builtins.Internal.snd tup_13}
in case (index_14, args_15) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.AsData.Internal.wrapUnsafeUncons -> ((PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_16),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_17))))) -> Plugin.Data.Spec.Mono1 arg_16 arg_17;
(((PlutusTx.Eq.==) (1 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_18))) -> Plugin.Data.Spec.Mono2 arg_18;
(((PlutusTx.Eq.==) (2 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_19))) -> Plugin.Data.Spec.Mono3 arg_19;
_ -> PlutusTx.Trace.traceError PlutusTx.ErrorCodes.reconstructCaseError}}
23 changes: 23 additions & 0 deletions plutus-tx-plugin/test/IsData/9.6/MyMonoRecord.th.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
instance PlutusTx.IsData.Class.ToData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.toBuiltinData #-};
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.MyMonoRecord arg_0
arg_1) = PlutusTx.Builtins.Internal.mkConstr (0 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_0) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_1) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval)))}
instance PlutusTx.IsData.Class.FromData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.fromBuiltinData #-};
PlutusTx.IsData.Class.fromBuiltinData d_2 = let constrFun_3 (!index_4) (!args_5) = case (index_4,
args_5) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.uncons -> GHC.Maybe.Just ((PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_6),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_7))))) -> GHC.Maybe.Just (Plugin.Data.Spec.MyMonoRecord arg_6 arg_7);
_ -> GHC.Maybe.Nothing}
in PlutusTx.Builtins.matchData' d_2 constrFun_3 (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing)}
instance PlutusTx.IsData.Class.UnsafeFromData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.unsafeFromBuiltinData #-};
PlutusTx.IsData.Class.unsafeFromBuiltinData d_8 = let {!tup_9 = PlutusTx.Builtins.Internal.unsafeDataAsConstr d_8;
!index_10 = PlutusTx.Builtins.Internal.fst tup_9;
!args_11 = PlutusTx.Builtins.Internal.snd tup_9}
in case (index_10, args_11) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.AsData.Internal.wrapUnsafeUncons -> ((PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_12),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_13))))) -> Plugin.Data.Spec.MyMonoRecord arg_12 arg_13;
_ -> PlutusTx.Trace.traceError PlutusTx.ErrorCodes.reconstructCaseError}}
18 changes: 18 additions & 0 deletions plutus-tx-plugin/test/IsData/9.6/MyMonoRecordAsList.th.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
instance PlutusTx.IsData.Class.ToData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.toBuiltinData #-};
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.MyMonoRecord arg_0
arg_1) = PlutusTx.Builtins.Internal.mkList (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_0) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_1) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval)))}
instance PlutusTx.IsData.Class.FromData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.fromBuiltinData #-};
PlutusTx.IsData.Class.fromBuiltinData d_2 = let constrFun_3 (!args_4) = case args_4 of
{(PlutusTx.Builtins.uncons -> GHC.Maybe.Just ((PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just consArg_5),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just consArg_6)))) -> GHC.Maybe.Just (Plugin.Data.Spec.MyMonoRecord consArg_5 consArg_6);
_ -> GHC.Maybe.Nothing}
in PlutusTx.Builtins.matchData' d_2 (GHC.Base.const GHC.Base.$ GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) constrFun_3 (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing)}
instance PlutusTx.IsData.Class.UnsafeFromData Plugin.Data.Spec.MyMonoRecord
where {{-# INLINABLE PlutusTx.IsData.Class.unsafeFromBuiltinData #-};
PlutusTx.IsData.Class.unsafeFromBuiltinData d_7 = let !args_8 = PlutusTx.Builtins.Internal.unsafeDataAsList d_7
in case args_8 of
{(PlutusTx.AsData.Internal.wrapUnsafeUncons -> ((PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_9),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_10)))) -> Plugin.Data.Spec.MyMonoRecord arg_9 arg_10;
_ -> PlutusTx.Trace.traceError PlutusTx.ErrorCodes.reconstructCaseError}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
let
data MyMonoRecordAsList | MyMonoRecordAsList_match where
MyMonoRecordAsList : integer -> integer -> MyMonoRecordAsList
!mkCons : all a. a -> list a -> list a = mkCons
!mkI : integer -> data = iData
!mkList : list data -> data = listData
!mkNilData : unit -> list data = mkNilData
!unitval : unit = ()
~`$ctoBuiltinData` : MyMonoRecordAsList -> data
= \(ds : MyMonoRecordAsList) ->
MyMonoRecordAsList_match
ds
{data}
(\(arg : integer) (arg : integer) ->
mkList
(mkCons
{data}
(mkI arg)
(mkCons {data} (mkI arg) (mkNilData unitval))))
~`$fToDataMyMonoRecordAsList` : (\a -> a -> data) MyMonoRecordAsList
= `$ctoBuiltinData`
~toBuiltinData : all a. (\a -> a -> data) a -> a -> data
= /\a -> \(v : (\a -> a -> data) a) -> v
in
toBuiltinData {MyMonoRecordAsList} `$fToDataMyMonoRecordAsList`
34 changes: 34 additions & 0 deletions plutus-tx-plugin/test/IsData/9.6/MyPolyData.th.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
instance (PlutusTx.IsData.Class.ToData a_0,
PlutusTx.IsData.Class.ToData b_1) => PlutusTx.IsData.Class.ToData (Plugin.Data.Spec.MyPolyData a_0
b_1)
where {{-# INLINABLE PlutusTx.IsData.Class.toBuiltinData #-};
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.Poly1 arg_2
arg_3) = PlutusTx.Builtins.Internal.mkConstr (0 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_2) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_3) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval)))
PlutusTx.IsData.Class.toBuiltinData (Plugin.Data.Spec.Poly2 arg_4) = PlutusTx.Builtins.Internal.mkConstr (1 :: GHC.Num.Integer.Integer) (PlutusTx.Builtins.Internal.mkCons (PlutusTx.IsData.Class.toBuiltinData arg_4) (PlutusTx.Builtins.Internal.mkNilData PlutusTx.Builtins.Internal.unitval))}
instance (PlutusTx.IsData.Class.FromData a_0,
PlutusTx.IsData.Class.FromData b_1) => PlutusTx.IsData.Class.FromData (Plugin.Data.Spec.MyPolyData a_0
b_1)
where {{-# INLINABLE PlutusTx.IsData.Class.fromBuiltinData #-};
PlutusTx.IsData.Class.fromBuiltinData d_5 = let constrFun_6 (!index_7) (!args_8) = case (index_7,
args_8) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.uncons -> GHC.Maybe.Just ((PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_9),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_10))))) -> GHC.Maybe.Just (Plugin.Data.Spec.Poly1 arg_9 arg_10);
(((PlutusTx.Eq.==) (1 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.headMaybe -> GHC.Maybe.Just (PlutusTx.IsData.Class.fromBuiltinData -> GHC.Maybe.Just arg_11))) -> GHC.Maybe.Just (Plugin.Data.Spec.Poly2 arg_11);
_ -> GHC.Maybe.Nothing}
in PlutusTx.Builtins.matchData' d_5 constrFun_6 (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing) (GHC.Base.const GHC.Maybe.Nothing)}
instance (PlutusTx.IsData.Class.UnsafeFromData a_0,
PlutusTx.IsData.Class.UnsafeFromData b_1) => PlutusTx.IsData.Class.UnsafeFromData (Plugin.Data.Spec.MyPolyData a_0
b_1)
where {{-# INLINABLE PlutusTx.IsData.Class.unsafeFromBuiltinData #-};
PlutusTx.IsData.Class.unsafeFromBuiltinData d_12 = let {!tup_13 = PlutusTx.Builtins.Internal.unsafeDataAsConstr d_12;
!index_14 = PlutusTx.Builtins.Internal.fst tup_13;
!args_15 = PlutusTx.Builtins.Internal.snd tup_13}
in case (index_14, args_15) of
{(((PlutusTx.Eq.==) (0 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.AsData.Internal.wrapUnsafeUncons -> ((PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_16),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_17))))) -> Plugin.Data.Spec.Poly1 arg_16 arg_17;
(((PlutusTx.Eq.==) (1 :: GHC.Num.Integer.Integer) -> GHC.Types.True),
(PlutusTx.Builtins.Internal.head -> (PlutusTx.IsData.Class.unsafeFromBuiltinData -> arg_18))) -> Plugin.Data.Spec.Poly2 arg_18;
_ -> PlutusTx.Trace.traceError PlutusTx.ErrorCodes.reconstructCaseError}}
1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/bytestring.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/int.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/list.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/mono.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/nested.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/poly.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/record.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/tuple.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/tupleInterop.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/unit.eval.golden

This file was deleted.

1 change: 0 additions & 1 deletion plutus-tx-plugin/test/IsData/9.6/unitInterop.eval.golden

This file was deleted.

This file was deleted.

Loading