diff --git a/cardano-constitution/cardano-constitution.cabal b/cardano-constitution/cardano-constitution.cabal
index c36a4b57d72..0e1a67d6cb6 100644
--- a/cardano-constitution/cardano-constitution.cabal
+++ b/cardano-constitution/cardano-constitution.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: cardano-constitution
-version: 1.56.0.0
+version: 1.56.0.1
license: Apache-2.0
license-files:
LICENSE
diff --git a/plutus-benchmark/marlowe/test/budgets.golden.tsv b/plutus-benchmark/marlowe/test/budgets.golden.tsv
index 3903cfa6227..480d6bdc510 100644
--- a/plutus-benchmark/marlowe/test/budgets.golden.tsv
+++ b/plutus-benchmark/marlowe/test/budgets.golden.tsv
@@ -1,200 +1,200 @@
-301137473 1460513 11275
-395666424 1632030 11275
-890369254 4423273 11275
-744909977 3391976 11275
-829415121 2319186 11275
-277127668 1349750 11275
-691051775 3234118 11275
-723218842 3519131 11275
-669990210 3098979 11275
-1077348502 4936736 11275
-1089558512 4769686 11275
-934881171 4501592 11275
-1047651082 5015665 11275
-1230185100 5749300 11275
-433093177 2116528 11275
-708896414 3398397 11275
-455708817 2224126 11275
-696490812 3369395 11275
-279349608 1354652 11275
-812887064 3751213 11275
-708397137 3142529 11275
-279404166 1354652 11275
-957406163 1239515 11275
-3873475314 1679698 11275
-313833075 1480740 11275
-277127668 1349750 11275
-482205675 2360755 11275
-1750211674 1612785 11275
-866532136 3247810 11275
-725277948 3532481 11275
-686197861 3081116 11275
-982421873 4774172 11275
-279349608 1354652 11275
-428157255 2100118 11275
-549064462 2671686 11275
-658649396 3094549 11275
-277127668 1349750 11275
-783903144 3663594 11275
-277127668 1349750 11275
-936001102 4545913 11275
-630297546 3066708 11275
-356414975 1532990 11275
-346603144 1655541 11275
-360154680 1723019 11275
-277127668 1349750 11275
-669830311 3257645 11275
-277127668 1349750 11275
-444215857 2167812 11275
-969999812 4527079 11275
-932765782 4444658 11275
-473217982 2272955 11275
-279349608 1354652 11275
-644075352 3083226 11275
-446101027 2176404 11275
-582644178 2822621 11275
-2157565956 1883126 11275
-1309342596 5534246 11275
-946320357 4564745 11275
-3873475314 1679698 11275
-446383353 2172714 11275
-725143764 3415402 11275
-435369675 2121430 11275
-725621304 3493632 11275
-709521586 3478717 11275
-629879902 3067128 11275
-490488101 2322321 11275
-420907740 1947985 11275
-1298331711 5394496 11275
-985559429 4685589 11275
-313833075 1480740 11275
-279349608 1354652 11275
-1085075619 4959376 11275
-360154680 1723019 11275
-490488101 2322321 11275
-562012332 2670167 11275
-317660437 1485681 11275
-508543076 2451623 11275
-1231241000 5749845 11275
-680950121 3295147 11275
-857712574 4181713 11275
-664013981 3258569 11275
-725000108 3493339 11275
-947081162 1184963 11275
-780236226 3735263 11275
-748387341 3566474 11275
-450568158 2193349 11275
-17813432889 1041483 11275
-929344412 4530482 11275
-277127668 1349750 11275
-430379195 2105020 11275
-676431662 3294241 11275
-324582631 1437576 11275
-351933935 1679378 11275
-279349608 1354652 11275
-878847948 2540535 11275
-277127668 1349750 11275
-592304224 2738804 11275
-722873155 2950395 11275
-3751569883 1136897 11275
-835570926 3929828 11275
-234128709 1129624 2427
-314105481 1564848 2427
-245533460 1187893 2427
-209893161 1002260 2427
-230184679 1103668 2427
-219316548 1047707 2427
-218378849 1042505 2427
-255828322 1235513 2427
-243875818 1179482 2427
-229269363 1098648 2427
-247333217 1194728 2427
-247529296 1201308 2427
-283288411 1392736 2427
-214602640 1026579 2427
-226118198 1084945 2427
-210369636 994599 2427
-245551572 1196981 2427
-223217455 1069220 2427
-223169584 1081552 2427
-250958161 1221054 2427
-217392424 1042207 2427
-236021560 1137857 2427
-234128709 1129624 2427
-244808822 1187875 2427
-217517949 1036108 2427
-214607145 1023388 2427
-218414958 1043503 2427
-213664865 1021377 2427
-234023565 1121572 2427
-225844721 1081255 2427
-234862680 1133748 2427
-217517949 1036108 2427
-209852471 1004453 2427
-226372285 1086744 2427
-214602564 1026579 2427
-214602564 1026579 2427
-250744050 1219949 2427
-221765519 1061892 2427
-247537229 1207006 2427
-234128709 1129624 2427
-253824587 1224386 2427
-217477259 1038301 2427
-217477259 1038301 2427
-222559891 1069820 2427
-274612090 1348027 2427
-259027367 1257408 2427
-226503921 1095776 2427
-217477259 1038301 2427
-287296787 1423954 2427
-245551572 1196981 2427
-222559891 1069820 2427
-253193021 1234134 2427
-236441360 1144921 2427
-213664865 1021377 2427
-210369636 994599 2427
-217477259 1038301 2427
-218414958 1043503 2427
-217477259 1038301 2427
-218414958 1043503 2427
-240673050 1173991 2427
-248819926 1214449 2427
-250014387 1223444 2427
-232628966 1127997 2427
-222032327 1064331 2427
-229333737 1101219 2427
-238110342 1146433 2427
-208955576 997058 2427
-217477259 1038301 2427
-256148135 1260647 2427
-218414958 1043503 2427
-217477259 1038301 2427
-218414958 1043503 2427
-249842460 1215745 2427
-218414958 1043503 2427
-278655575 1358918 2427
-301797839 1492341 2427
-218414958 1043503 2427
-242217672 1181897 2427
-244808822 1187875 2427
-219316548 1047707 2427
-228816572 1111073 2427
-229419306 1105305 2427
-258125935 1264974 2427
-210369636 994599 2427
-219316548 1047707 2427
-241527409 1158328 2427
-236763500 1138971 2427
-242217672 1181897 2427
-222265976 1068021 2427
-225017212 1076055 2427
-225918802 1080259 2427
-218414958 1043503 2427
-242579645 1167163 2427
-244808822 1187875 2427
-217477259 1038301 2427
-214602564 1026579 2427
-233231700 1122229 2427
-218414958 1043503 2427
-225844721 1081255 2427
-252279389 1223434 2427
+248424032 1171399 11644
+346885177 1363330 11644
+778379524 3802257 11644
+609129152 2644588 11644
+735919276 1805188 11644
+231590438 1099056 11644
+607019942 2769054 11644
+604290223 2862691 11644
+568086331 2536969 11644
+895525256 3933858 11644
+872997034 3569860 11644
+800710216 3757830 11644
+897844156 4187667 11644
+1084302254 4939522 11644
+370757708 1773200 11644
+571230119 2640107 11644
+389181200 1856992 11644
+580692905 2726471 11644
+233812378 1103958 11644
+711795408 3190619 11644
+602722318 2558715 11644
+233866936 1103958 11644
+908624916 970815 11644
+3804911212 1303748 11644
+269377184 1236048 11644
+231590438 1099056 11644
+411013995 1968507 11644
+1695228763 1310369 11644
+756378275 2638394 11644
+604463859 2865139 11644
+602166028 2616052 11644
+863356240 4113344 11644
+233812378 1103958 11644
+361064430 1730082 11644
+473406133 2253536 11644
+574029694 2625685 11644
+231590438 1099056 11644
+639204667 2868286 11644
+231590438 1099056 11644
+810457150 3850269 11644
+541084995 2573930 11644
+307633728 1264290 11644
+288089846 1332823 11644
+295153348 1364289 11644
+231590438 1099056 11644
+578997629 2754867 11644
+231590438 1099056 11644
+381880388 1824484 11644
+836088840 3787211 11644
+813692610 3787316 11644
+408131966 1913823 11644
+233812378 1103958 11644
+561341120 2625264 11644
+383765558 1833076 11644
+505100379 2393569 11644
+2080073934 1458058 11644
+1073317016 4226384 11644
+820776405 3869101 11644
+3804911212 1303748 11644
+384047884 1829386 11644
+587477469 2657112 11644
+373034206 1778102 11644
+618041614 2897026 11644
+605712836 2903915 11644
+538781881 2563448 11644
+394446073 1792917 11644
+372126493 1679285 11644
+1035547674 3943356 11644
+859427608 3986145 11644
+269377184 1236048 11644
+233812378 1103958 11644
+903252373 3956498 11644
+295153348 1364289 11644
+394446073 1792917 11644
+488239473 2262919 11644
+256481276 1147561 11644
+437487311 2058583 11644
+1083472684 4929165 11644
+588231969 2781467 11644
+742660581 3548371 11644
+574801430 2765791 11644
+619305888 2907635 11644
+902625271 940271 11644
+681030040 3185571 11644
+648377024 3011882 11644
+388232689 1850021 11644
+17773302354 820799 11644
+805685930 3845740 11644
+231590438 1099056 11644
+363286370 1734984 11644
+583713510 2780561 11644
+280126740 1192884 11644
+298827332 1386670 11644
+233812378 1103958 11644
+774538713 1966517 11644
+231590438 1099056 11644
+500865342 2235014 11644
+612719294 2340979 11644
+3707113992 892205 11644
+723581196 3308812 11644
+179723132 835100 2621
+258953488 1266920 2621
+194066823 909973 2621
+158170524 722740 2621
+175779102 809144 2621
+164281763 749881 2621
+163344064 744679 2621
+203052215 950291 2621
+188969033 882456 2621
+175736048 809324 2621
+193055640 901004 2621
+194625189 915286 2621
+229138834 1099812 2621
+161506533 739357 2621
+173086091 798123 2621
+155900059 699675 2621
+194020935 918661 2621
+171622818 790500 2621
+172884417 810134 2621
+199491524 943134 2621
+165733787 763087 2621
+183053453 851435 2621
+179723132 835100 2621
+190467245 893751 2621
+163048372 741184 2621
+160945830 733264 2621
+163945381 748579 2621
+160568758 734155 2621
+179681988 827448 2621
+171439144 786731 2621
+181894573 847326 2621
+163048372 741184 2621
+158129834 724933 2621
+173340178 799922 2621
+161506457 739357 2621
+161506457 739357 2621
+195837265 922923 2621
+168733412 775070 2621
+196006592 928686 2621
+179723132 835100 2621
+199611010 931062 2621
+163007682 743377 2621
+163007682 743377 2621
+170901254 790700 2621
+223273453 1070907 2621
+206251260 972186 2621
+174845284 816656 2621
+163007682 743377 2621
+233955472 1135830 2621
+194020935 918661 2621
+170901254 790700 2621
+200288914 948112 2621
+182035783 850397 2621
+160568758 734155 2621
+155900059 699675 2621
+163007682 743377 2621
+163945381 748579 2621
+163007682 743377 2621
+163945381 748579 2621
+189078413 895271 2621
+197289289 936129 2621
+198483750 945124 2621
+179596859 841175 2621
+169000220 777509 2621
+174928160 806695 2621
+183768765 852309 2621
+157232939 717538 2621
+163007682 743377 2621
+204617498 982327 2621
+163945381 748579 2621
+163007682 743377 2621
+163945381 748579 2621
+195500883 921621 2621
+163945381 748579 2621
+224569998 1066394 2621
+249213732 1208319 2621
+163945381 748579 2621
+190623035 903177 2621
+190467245 893751 2621
+164281763 749881 2621
+177157935 831953 2621
+176387199 818483 2621
+205221828 978952 2621
+155900059 699675 2621
+164281763 749881 2621
+186684624 861702 2621
+182421923 844847 2621
+190623035 903177 2621
+170607339 788901 2621
+170611635 781531 2621
+170948017 782833 2621
+163945381 748579 2621
+188302068 873439 2621
+190467245 893751 2621
+163007682 743377 2621
+161506457 739357 2621
+178826123 827705 2621
+163945381 748579 2621
+171439144 786731 2621
+198001812 929710 2621
diff --git a/plutus-benchmark/marlowe/test/data.budgets.golden.tsv b/plutus-benchmark/marlowe/test/data.budgets.golden.tsv
index 66b72c0a7e9..b0c70d597f2 100644
--- a/plutus-benchmark/marlowe/test/data.budgets.golden.tsv
+++ b/plutus-benchmark/marlowe/test/data.budgets.golden.tsv
@@ -1,200 +1,200 @@
-316420351 1471303 12479
-443538497 1784994 12479
-1106684273 5063466 12479
-845597574 3697989 12479
-888793505 2476280 12479
-291882546 1357240 12479
-779145126 3487529 12479
-848156642 3832376 12479
-766124349 3388838 12479
-1123046713 5068472 12479
-1147981976 4965084 12479
-1102673751 4979005 12479
-1262459897 5643974 12479
-1405474119 6279947 12479
-475159388 2225564 12479
-797725765 3656408 12479
-502637997 2366712 12479
-802496902 3616100 12479
-294104486 1362142 12479
-931241146 4055897 12479
-787486179 3356360 12479
-294159044 1362142 12479
-1003806236 1383279 12479
-3930625500 1865520 12479
-361705148 1633704 12479
-291882546 1357240 12479
-564388652 2655807 12479
-1806091138 1792283 12479
-924075600 3437708 12479
-848266329 3835858 12479
-765894903 3298747 12479
-1206510744 5443743 12479
-294104486 1362142 12479
-469417185 2220118 12479
-632253898 2904241 12479
-746150747 3344260 12479
-291882546 1357240 12479
-864288186 3885525 12479
-291882546 1357240 12479
-1145902664 5137465 12479
-718848904 3298003 12479
-404287048 1685954 12479
-361358022 1663031 12479
-374909558 1730509 12479
-291882546 1357240 12479
-795786374 3607970 12479
-291882546 1357240 12479
-486186068 2276248 12479
-1092518744 4826980 12479
-1071808965 4928812 12479
-515284193 2381991 12479
-294104486 1362142 12479
-743434949 3380939 12479
-488071238 2284840 12479
-661509220 3035052 12479
-2214069420 2066524 12479
-1369238060 5738844 12479
-1157094608 5168851 12479
-3930625500 1865520 12479
-488353564 2281150 12479
-813110658 3665511 12479
-477435886 2230466 12479
-841566072 3790909 12479
-845282762 3854564 12479
-702576366 3231927 12479
-516402370 2376045 12479
-470251813 2110149 12479
-1344517386 5489956 12479
-1171420989 5225841 12479
-361705148 1633704 12479
-294104486 1362142 12479
-1130773830 5091112 12479
-374909558 1730509 12479
-516402370 2376045 12479
-657060014 2950724 12479
-319024800 1449171 12479
-586576118 2658854 12479
-1397390416 6248770 12479
-796284694 3591405 12479
-978956006 4614695 12479
-795979392 3638043 12479
-860177482 3869870 12479
-993481235 1328727 12479
-916998881 4115351 12479
-871146373 3879150 12479
-492634369 2302385 12479
-17859832962 1185247 12479
-1157895507 5202909 12479
-291882546 1357240 12479
-471639125 2225020 12479
-796587185 3601091 12479
-372454704 1590540 12479
-399806008 1832342 12479
-294104486 1362142 12479
-930692480 2669751 12479
-291882546 1357240 12479
-688246363 3027463 12479
-778944619 3131093 12479
-3797969956 1280661 12479
-970991712 4289616 12479
-150985921 672865 1690
-332736557 1439089 1690
-190115365 820375 1690
-122155085 542448 1690
-152968897 670387 1690
-120554622 554310 1690
-121492321 559512 1690
-192413183 849841 1690
-185042282 808645 1690
-145612115 656098 1690
-172183567 770065 1690
-203695052 892923 1690
-254783828 1066332 1690
-120554698 554310 1690
-147829032 639523 1690
-113039745 496657 1690
-202094779 904785 1690
-149085243 653220 1690
-166389512 724367 1690
-207684072 885832 1690
-131153445 602910 1690
-160616714 704041 1690
-150985921 672865 1690
-183441933 820507 1690
-122155085 542448 1690
-122155085 542448 1690
-120554622 554310 1690
-121492321 559512 1690
-148028246 661128 1690
-140145091 643790 1690
-167896502 754392 1690
-122155085 542448 1690
-121492321 559512 1690
-152968897 670387 1690
-120554622 554310 1690
-120554622 554310 1690
-183985713 796982 1690
-135013292 607498 1690
-196028252 845140 1690
-150985921 672865 1690
-195694024 836778 1690
-121492321 559512 1690
-121492321 559512 1690
-152968897 670387 1690
-250378052 1066989 1690
-229777135 1023020 1690
-150985921 672865 1690
-121492321 559512 1690
-280227246 1215661 1690
-202094779 904785 1690
-152968897 670387 1690
-198444383 850170 1690
-164789163 736229 1690
-121492321 559512 1690
-113039745 496657 1690
-121492321 559512 1690
-120554622 554310 1690
-121492321 559512 1690
-120554622 554310 1690
-190357276 824065 1690
-194584536 845582 1690
-207839514 920877 1690
-164789163 736229 1690
-140145091 643790 1690
-150414264 657580 1690
-166501588 718145 1690
-123092670 547650 1690
-121492321 559512 1690
-229307268 1002786 1690
-120554622 554310 1690
-121492321 559512 1690
-120554622 554310 1690
-183985713 796982 1690
-120554622 554310 1690
-232656983 1001000 1690
-322571118 1424176 1690
-120554622 554310 1690
-183985713 796982 1690
-183441933 820507 1690
-120554622 554310 1690
-164789163 736229 1690
-150017891 655441 1690
-224985294 975130 1690
-113039745 496657 1690
-120554622 554310 1690
-158627069 709728 1690
-174989357 757652 1690
-183985713 796982 1690
-147819132 639523 1690
-131153445 602910 1690
-131153445 602910 1690
-120554622 554310 1690
-177450631 812346 1690
-183441933 820507 1690
-121492321 559512 1690
-120554622 554310 1690
-150017891 655441 1690
-120554622 554310 1690
-140145091 643790 1690
-197772729 877129 1690
+268046813 1204901 12727
+385737985 1465976 12727
+969122366 4297504 12727
+696868669 2875981 12727
+791085352 1937974 12727
+251117219 1131958 12727
+688049230 2982351 12727
+727742672 3164638 12727
+652473467 2759210 12727
+941244823 4062702 12727
+919303894 3696338 12727
+962612089 4199437 12727
+1099268207 4738754 12727
+1242440076 5372937 12727
+415629275 1896744 12727
+650835407 2844504 12727
+431316340 1972768 12727
+691198869 2996386 12727
+253339159 1136860 12727
+822923797 3454685 12727
+675997975 2738736 12727
+253393717 1136860 12727
+946005724 1064261 12727
+3851704794 1431650 12727
+308229992 1338694 12727
+251117219 1131958 12727
+474163764 2158219 12727
+1740815623 1432347 12727
+803629135 2770772 12727
+727204097 3164320 12727
+676961685 2805573 12727
+1059986387 4627565 12727
+253339159 1136860 12727
+399320867 1833076 12727
+549808714 2447079 12727
+654418982 2834982 12727
+251117219 1131958 12727
+712576324 3048907 12727
+251117219 1131958 12727
+1007639287 4368001 12727
+630997025 2810831 12727
+346486536 1366936 12727
+307616627 1365725 12727
+314680129 1397191 12727
+251117219 1131958 12727
+694012797 3043370 12727
+251117219 1131958 12727
+426655955 1947428 12727
+958167629 4081716 12727
+945548414 4230458 12727
+452955533 2037067 12727
+253339159 1136860 12727
+649864637 2861557 12727
+428541125 1956020 12727
+579064036 2577890 12727
+2125660794 1580036 12727
+1121095876 4362062 12727
+1020669778 4409491 12727
+3851704794 1431650 12727
+428823451 1952330 12727
+666544431 2855507 12727
+417905773 1901646 12727
+726670974 3151989 12727
+726386439 3193536 12727
+618401581 2764963 12727
+422466906 1856151 12727
+412451301 1791131 12727
+1081887360 4036124 12727
+1031871703 4451367 12727
+308229992 1338694 12727
+253339159 1136860 12727
+948971940 4085342 12727
+314680129 1397191 12727
+422466906 1856151 12727
+572776283 2483458 12727
+262745542 1137263 12727
+510618968 2237704 12727
+1236194920 5351864 12727
+696293926 3036309 12727
+847945107 3891823 12727
+700267610 3106159 12727
+741281159 3208842 12727
+940006079 1033717 12727
+804356176 3490131 12727
+763910363 3283940 12727
+433104256 1973565 12727
+17810683162 914245 12727
+1016765452 4417041 12727
+251117219 1131958 12727
+401542807 1837978 12727
+696596417 3045995 12727
+318979548 1295530 12727
+337680140 1489316 12727
+253339159 1136860 12727
+824009484 2081529 12727
+251117219 1131958 12727
+585204478 2456955 12727
+658498154 2464157 12727
+3744494800 985651 12727
+851600289 3626882 12727
+136459454 590143 1630
+294376358 1221527 1630
+172785143 722147 1630
+110170088 474728 1630
+137216014 581261 1630
+107605494 480690 1630
+108543193 485892 1630
+172541491 736611 1630
+165521513 698113 1630
+130472440 570174 1630
+154502422 669139 1630
+180406397 760985 1630
+234912136 953102 1630
+107605570 480690 1630
+134266696 562701 1630
+102018879 434837 1630
+177841993 766947 1630
+134909699 573196 1630
+150636629 635241 1630
+190353850 787604 1630
+116626978 520188 1630
+145477039 618117 1630
+136459454 590143 1630
+162957033 704075 1630
+110170088 474728 1630
+110170088 474728 1630
+107605494 480690 1630
+108543193 485892 1630
+132888571 575204 1630
+123428077 548764 1630
+148375733 643860 1630
+110170088 474728 1630
+108543193 485892 1630
+137216014 581261 1630
+107605494 480690 1630
+107605494 480690 1630
+167881907 705158 1630
+121450956 530676 1630
+179311238 750114 1630
+136459454 590143 1630
+178363802 738550 1630
+108543193 485892 1630
+108543193 485892 1630
+137216014 581261 1630
+228929021 944657 1630
+198952708 848270 1630
+136459454 590143 1630
+108543193 485892 1630
+249402819 1040911 1630
+177841993 766947 1630
+137216014 581261 1630
+181727369 755144 1630
+148072149 641203 1630
+108543193 485892 1630
+102018879 434837 1630
+108543193 485892 1630
+107605494 480690 1630
+108543193 485892 1630
+107605494 480690 1630
+171800638 719433 1630
+176903391 744656 1630
+184550859 788939 1630
+148072149 641203 1630
+123428077 548764 1630
+135625512 574354 1630
+152326044 638121 1630
+111107673 479930 1630
+108543193 485892 1630
+205054482 864948 1630
+107605494 480690 1630
+108543193 485892 1630
+107605494 480690 1630
+167881907 705158 1630
+107605494 480690 1630
+211207952 878668 1630
+279478902 1179308 1630
+107605494 480690 1630
+167881907 705158 1630
+162957033 704075 1630
+107605494 480690 1630
+148072149 641203 1630
+136455555 578619 1630
+201696639 843192 1630
+102018879 434837 1630
+107605494 480690 1630
+141910055 614702 1630
+156432719 653020 1630
+167881907 705158 1630
+134256796 562701 1630
+116626978 520188 1630
+116626978 520188 1630
+107605494 480690 1630
+153197845 674508 1630
+162957033 704075 1630
+108543193 485892 1630
+107605494 480690 1630
+136455555 578619 1630
+107605494 480690 1630
+123428077 548764 1630
+174484074 745191 1630
diff --git a/plutus-core/plutus-core.cabal b/plutus-core/plutus-core.cabal
index 15ae0eeb18e..f152b6eecda 100644
--- a/plutus-core/plutus-core.cabal
+++ b/plutus-core/plutus-core.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-core
-version: 1.56.0.0
+version: 1.56.0.1
license: Apache-2.0
license-files:
LICENSE
diff --git a/plutus-executables/plutus-executables.cabal b/plutus-executables/plutus-executables.cabal
index 4fdf5c2ab55..1a315d607eb 100644
--- a/plutus-executables/plutus-executables.cabal
+++ b/plutus-executables/plutus-executables.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-executables
-version: 1.56.0.0
+version: 1.56.0.1
synopsis: Tools for running plutus core programs
homepage: https://github.com/IntersectMBO/plutus
license: Apache-2.0
diff --git a/plutus-ledger-api/CHANGELOG.md b/plutus-ledger-api/CHANGELOG.md
index e2aa3aef2ac..6355273dae7 100644
--- a/plutus-ledger-api/CHANGELOG.md
+++ b/plutus-ledger-api/CHANGELOG.md
@@ -1,4 +1,11 @@
+
+# 1.56.0.1 — 2026-04-07
+
+## Added
+
+- Brought back Ratio.from/toGHC as deprecated.
+
# 1.56.0.0 — 2025-11-27
diff --git a/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md b/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md
deleted file mode 100644
index 5caba6dfc8c..00000000000
--- a/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Added
-
-- Brought back Ratio.from/toGHC as deprecated.
diff --git a/plutus-ledger-api/plutus-ledger-api.cabal b/plutus-ledger-api/plutus-ledger-api.cabal
index 17ecf693330..246cf5c6dd4 100644
--- a/plutus-ledger-api/plutus-ledger-api.cabal
+++ b/plutus-ledger-api/plutus-ledger-api.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-ledger-api
-version: 1.56.0.0
+version: 1.56.0.1
license: Apache-2.0
license-files:
LICENSE
diff --git a/plutus-metatheory/plutus-metatheory.cabal b/plutus-metatheory/plutus-metatheory.cabal
index 9e13bd05ca5..513a39ed575 100644
--- a/plutus-metatheory/plutus-metatheory.cabal
+++ b/plutus-metatheory/plutus-metatheory.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-metatheory
-version: 1.56.0.0
+version: 1.56.0.1
synopsis: Command line tool for running plutus core programs
homepage: https://github.com/IntersectMBO/plutus
license: Apache-2.0
diff --git a/plutus-tx-plugin/CHANGELOG.md b/plutus-tx-plugin/CHANGELOG.md
index 31223bcc62c..8a359c94cac 100644
--- a/plutus-tx-plugin/CHANGELOG.md
+++ b/plutus-tx-plugin/CHANGELOG.md
@@ -1,4 +1,11 @@
+
+# 1.56.0.1 — 2026-04-07
+
+## Fixed
+
+- Backport: replaced `caseInteger` SoP fallback (runtime list-indexing via `PlutusTx.List.!!`) with a compile-time `equalsInteger`/`ifThenElse` chain, fixing a 3-5x cost regression in `unsafeFromBuiltinData` for multi-constructor types. Also fixed a latent bug in `compileHaskellList` that silently dropped list elements when GHC used `(:)`-chain representation.
+
# 1.55.0.0 — 2025-11-11
diff --git a/plutus-tx-plugin/plutus-tx-plugin.cabal b/plutus-tx-plugin/plutus-tx-plugin.cabal
index 65888661efe..27518d26a43 100644
--- a/plutus-tx-plugin/plutus-tx-plugin.cabal
+++ b/plutus-tx-plugin/plutus-tx-plugin.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-tx-plugin
-version: 1.56.0.0
+version: 1.56.0.1
license: Apache-2.0
license-files:
LICENSE
@@ -143,6 +143,9 @@ test-suite plutus-tx-plugin-tests
IntegerLiterals.NoStrict.NoNegativeLiterals.Spec
IntegerLiterals.Strict.NegativeLiterals.Spec
IntegerLiterals.Strict.NoNegativeLiterals.Spec
+ IsData.Budget.BuiltinCasing
+ IsData.Budget.Lib
+ IsData.Budget.SoP
IsData.Spec
Lift.Spec
List.Properties1
diff --git a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs
index d52f36911a2..1205600aea6 100644
--- a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs
+++ b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs
@@ -45,7 +45,6 @@ import PlutusTx.Compiler.Types
import PlutusTx.Compiler.Utils
import PlutusTx.Coverage
import PlutusTx.Function qualified
-import PlutusTx.List qualified
import PlutusTx.Optimize.Inline qualified
import PlutusTx.PIRTypes
import PlutusTx.PLCTypes (PLCType, PLCVar)
@@ -57,7 +56,7 @@ import PlutusTx.Trace
import PlutusIR qualified as PIR
import PlutusIR.Analysis.Builtins
import PlutusIR.Compiler.Definitions qualified as PIR
-import PlutusIR.Compiler.Names (safeFreshName)
+import PlutusIR.Compiler.Names (safeFreshName, safeFreshTyName)
import PlutusIR.Compiler.Types qualified as PIR
import PlutusIR.Core.Type (Term (..))
import PlutusIR.MkPir qualified as PIR
@@ -862,13 +861,22 @@ compileHaskellList = buildList . strip
throwPlain $
CompilationError "Unexpected expression where a list constructor was expected"
- -- This is when the list is a single element and GHC will specialize list builder directly.
- -- GHC will generate core that looks like below:
- -- (:) @resTy e ([] @resTy)
- buildList (GHC.App (GHC.App (GHC.App (GHC.Var _con) _ty) e) _) = traverse compileExpr [e]
- -- This is when the list has more than one elements. GHC will generate core that looks like below:
- -- build @resTy (\con nil -> con e1 (con e2 (... nil)))
- -- 'build' is some special function that abstracts the list type.
+ -- GHC may represent lists in two forms:
+ -- 1. Cons chain: (:) @ty e1 ((:) @ty e2 (... ([] @ty)))
+ -- 2. Build form: build @ty (\con nil -> con e1 (con e2 (... nil)))
+ -- Form 1 is used when GHC inlines 'build' (e.g. for recursive types with
+ -- many constructors). Form 2 is used when build/foldr fusion is possible.
+
+ -- Form 1: explicit (:) chain. Walk the spine, collecting elements.
+ buildList expr@(GHC.App (GHC.App (GHC.App (GHC.Var con) _ty) _e) _rest)
+ | GHC.isDataConWorkId con =
+ let consumeCons = \case
+ GHC.App (GHC.App (GHC.App (GHC.Var _con) _ty') e) rest ->
+ (e :) <$> consumeCons (strip rest)
+ GHC.App (GHC.Var _nil) _ty' -> pure [] -- [] @ty
+ _ -> err
+ in consumeCons expr >>= traverse compileExpr
+ -- Form 2: build-based list.
buildList (GHC.App (GHC.App _build _ty) (GHC.Lam _tyArg (GHC.Lam con (GHC.Lam nil li)))) =
let
consume :: GHC.CoreExpr -> m [GHC.CoreExpr]
@@ -922,7 +930,6 @@ compileExpr e = traceCompilation 2 ("Compiling expr:" GHC.<+> GHC.ppr e) $ do
inlineName <- lookupGhcName 'PlutusTx.Optimize.Inline.inline
caseIntegerName <- lookupGhcName 'Builtins.caseInteger
- listIndexId <- lookupGhcId '(PlutusTx.List.!!)
let
compileMkNil
@@ -971,14 +978,36 @@ compileExpr e = traceCompilation 2 ("Compiling expr:" GHC.<+> GHC.ppr e) $ do
scrut' <- compileExpr scrut
branches <- compileHaskellList li
pure $ PIR.kase annAlwaysInline resTy' scrut' branches
- | GHC.getName var == caseIntegerName ->
- -- This is when we don't have bultin casing. We have to use something
- -- else. Currently, it will use PlutusTx.List.!!, but this will be quite a bit
- -- less efficient since it will also build the list and than index on the built
- -- list. Ideally, It is possible to have some custom PIR here that will generate
- -- chain of if-statements so that can skip the list construction work if we want
- -- to optimize more here.
- compileExpr $ GHC.App (GHC.App (GHC.App (GHC.Var listIndexId) (GHC.Type resTy)) li) scrut
+ -- SumsOfProducts/Scott: compile to a lazy equalsInteger/ifThenElse chain.
+ | GHC.getName var == caseIntegerName -> do
+ resTy' <- compileTypeNorm resTy
+ scrut' <- compileExpr scrut
+ branches <- compileHaskellList li
+ dead <- safeFreshTyName "dead"
+ let thunkTy = PLC.TyForall annMayInline dead (PLC.Type annMayInline) resTy'
+ thunk = PIR.TyAbs annMayInline dead (PLC.Type annMayInline)
+ unthunk t = PIR.TyInst annMayInline t resTy'
+ -- Uses the (all dead. resTy) / (/\dead -> branch) encoding to avoid
+ -- evaluating non-matching branches.
+ -- e.g. ifThenElse {all dead. resTy} (equalsInteger scrut 0)
+ -- (/\dead -> b0) (/\dead -> ifThenElse ...) {resTy}
+ mkChain _ [] = PIR.Error annMayInline resTy'
+ mkChain idx (b : bs) =
+ unthunk $
+ PIR.mkIterApp
+ (PIR.tyInst annMayInline (PIR.builtin annMayInline PLC.IfThenElse) thunkTy)
+ [
+ ( annMayInline
+ , PIR.mkIterApp
+ (PIR.builtin annMayInline PLC.EqualsInteger)
+ [ (annMayInline, PIR.mkConstant @Integer annMayInline idx)
+ , (annMayInline, scrut')
+ ]
+ )
+ , (annMayInline, thunk b)
+ , (annMayInline, thunk (mkChain (idx + 1) bs))
+ ]
+ pure $ mkChain (0 :: Integer) branches
{- Note [Lazy boolean operators]
(||) and (&&) have a special treatment: we want them lazy in the second argument,
as this is the behavior in Haskell and other PLs.
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs
new file mode 100644
index 00000000000..798f780dc5e
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:datatypes=BuiltinCasing #-}
+
+module IsData.Budget.BuiltinCasing where
+
+import IsData.Budget.Lib
+
+import PlutusTx.Prelude
+
+import PlutusTx.Builtins ()
+import PlutusTx.Code (CompiledCode, unsafeApplyCode)
+import PlutusTx.IsData ()
+import PlutusTx.Lift (liftCodeDef)
+import PlutusTx.TH (compile)
+import PlutusTx.Test (goldenBundle)
+import System.FilePath qualified as Haskell
+import Test.Tasty.Extras (TestNested, testNested, testNestedGhc)
+import Prelude qualified as Haskell
+
+decodeSingle :: CompiledCode (BuiltinData -> Integer)
+decodeSingle =
+ $$( compile
+ [||\d -> case unsafeFromBuiltinData d of Single x -> x||]
+ )
+
+decodePair :: CompiledCode (BuiltinData -> Integer)
+decodePair =
+ $$( compile
+ [||
+ \d -> case unsafeFromBuiltinData d of
+ PairA x -> x
+ PairB x -> x + 1
+ ||]
+ )
+
+decodeABC :: CompiledCode (BuiltinData -> Integer)
+decodeABC =
+ $$( compile
+ [||
+ \d -> case unsafeFromBuiltinData d of
+ A x -> x
+ B x -> x + 100
+ C x -> x + 200
+ ||]
+ )
+
+tests :: TestNested
+tests =
+ testNested ("IsData" Haskell.> "Budget" Haskell.> "BuiltinCasing")
+ . Haskell.pure
+ $ testNestedGhc
+ [ goldenBundle "decodeSingle" decodeSingle (decodeSingle `unsafeApplyCode` inpSingle)
+ , goldenBundle "decodePairA" decodePair (decodePair `unsafeApplyCode` inpPairA)
+ , goldenBundle "decodePairB" decodePair (decodePair `unsafeApplyCode` inpPairB)
+ , goldenBundle "decodeA" decodeABC (decodeABC `unsafeApplyCode` inpA)
+ , goldenBundle "decodeC" decodeABC (decodeABC `unsafeApplyCode` inpC)
+ ]
+ where
+ inpSingle = liftCodeDef (toBuiltinData (Single 99))
+ inpPairA = liftCodeDef (toBuiltinData (PairA 10))
+ inpPairB = liftCodeDef (toBuiltinData (PairB 20))
+ inpA = liftCodeDef (toBuiltinData (A 42))
+ inpC = liftCodeDef (toBuiltinData (C 7))
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval
new file mode 100644
index 00000000000..31c76961a04
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 52
+Flat Size: 69
+
+(con integer 42)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir
new file mode 100644
index 00000000000..625defd5218
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir
@@ -0,0 +1,26 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> ABC)
+ index
+ [ (\(ds : list data) -> A (unIData (headList {data} ds)))
+ , (\(ds : list data) -> B (unIData (headList {data} ds)))
+ , (\(ds : list data) -> C (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc
new file mode 100644
index 00000000000..ce44a731249
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc
@@ -0,0 +1,14 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))])
+ , (\ds -> constr 2 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval
new file mode 100644
index 00000000000..da301254da8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval
@@ -0,0 +1,6 @@
+CPU: 677_790
+Memory: 2_998
+AST Size: 52
+Flat Size: 68
+
+(con integer 207)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir
new file mode 100644
index 00000000000..625defd5218
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir
@@ -0,0 +1,26 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> ABC)
+ index
+ [ (\(ds : list data) -> A (unIData (headList {data} ds)))
+ , (\(ds : list data) -> B (unIData (headList {data} ds)))
+ , (\(ds : list data) -> C (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc
new file mode 100644
index 00000000000..ce44a731249
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc
@@ -0,0 +1,14 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))])
+ , (\ds -> constr 2 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval
new file mode 100644
index 00000000000..a3241809396
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 38
+Flat Size: 51
+
+(con integer 10)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir
new file mode 100644
index 00000000000..27b9e0e78d0
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir
@@ -0,0 +1,23 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Pair)
+ index
+ [ (\(ds : list data) -> PairA (unIData (headList {data} ds)))
+ , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc
new file mode 100644
index 00000000000..e83f460ede1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc
@@ -0,0 +1,13 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval
new file mode 100644
index 00000000000..44dc5d05f57
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval
@@ -0,0 +1,6 @@
+CPU: 677_790
+Memory: 2_998
+AST Size: 38
+Flat Size: 51
+
+(con integer 21)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir
new file mode 100644
index 00000000000..27b9e0e78d0
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir
@@ -0,0 +1,23 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Pair)
+ index
+ [ (\(ds : list data) -> PairA (unIData (headList {data} ds)))
+ , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc
new file mode 100644
index 00000000000..e83f460ede1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc
@@ -0,0 +1,13 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval
new file mode 100644
index 00000000000..7b41fb3134b
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 24
+Flat Size: 37
+
+(con integer 99)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir
new file mode 100644
index 00000000000..70fc450a718
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir
@@ -0,0 +1,20 @@
+let
+ data Single | Single_match where
+ Single : integer -> Single
+in
+\(d : data) ->
+ Single_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Single}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Single)
+ index
+ [(\(ds : list data) -> Single (unIData (headList {data} ds)))]
+ args))
+ {integer}
+ (\(x : integer) -> x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc
new file mode 100644
index 00000000000..d75a2eb61c1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc
@@ -0,0 +1,10 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case index [(\ds -> constr 0 [(unIData (force headList ds))])]
+ args) ])
+ [(\x -> x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval
new file mode 100644
index 00000000000..31c76961a04
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 52
+Flat Size: 69
+
+(con integer 42)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir
new file mode 100644
index 00000000000..625defd5218
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir
@@ -0,0 +1,26 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> ABC)
+ index
+ [ (\(ds : list data) -> A (unIData (headList {data} ds)))
+ , (\(ds : list data) -> B (unIData (headList {data} ds)))
+ , (\(ds : list data) -> C (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc
new file mode 100644
index 00000000000..ce44a731249
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc
@@ -0,0 +1,14 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))])
+ , (\ds -> constr 2 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval
new file mode 100644
index 00000000000..da301254da8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval
@@ -0,0 +1,6 @@
+CPU: 677_790
+Memory: 2_998
+AST Size: 52
+Flat Size: 68
+
+(con integer 207)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir
new file mode 100644
index 00000000000..625defd5218
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir
@@ -0,0 +1,26 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> ABC)
+ index
+ [ (\(ds : list data) -> A (unIData (headList {data} ds)))
+ , (\(ds : list data) -> B (unIData (headList {data} ds)))
+ , (\(ds : list data) -> C (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc
new file mode 100644
index 00000000000..ce44a731249
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc
@@ -0,0 +1,14 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))])
+ , (\ds -> constr 2 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval
new file mode 100644
index 00000000000..a3241809396
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 38
+Flat Size: 51
+
+(con integer 10)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir
new file mode 100644
index 00000000000..27b9e0e78d0
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir
@@ -0,0 +1,23 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Pair)
+ index
+ [ (\(ds : list data) -> PairA (unIData (headList {data} ds)))
+ , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc
new file mode 100644
index 00000000000..e83f460ede1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc
@@ -0,0 +1,13 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval
new file mode 100644
index 00000000000..44dc5d05f57
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval
@@ -0,0 +1,6 @@
+CPU: 677_790
+Memory: 2_998
+AST Size: 38
+Flat Size: 51
+
+(con integer 21)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir
new file mode 100644
index 00000000000..27b9e0e78d0
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir
@@ -0,0 +1,23 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Pair)
+ index
+ [ (\(ds : list data) -> PairA (unIData (headList {data} ds)))
+ , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ]
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc
new file mode 100644
index 00000000000..e83f460ede1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc
@@ -0,0 +1,13 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case
+ index
+ [ (\ds -> constr 0 [(unIData (force headList ds))])
+ , (\ds -> constr 1 [(unIData (force headList ds))]) ]
+ args) ])
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval
new file mode 100644
index 00000000000..7b41fb3134b
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval
@@ -0,0 +1,6 @@
+CPU: 512_582
+Memory: 2_596
+AST Size: 24
+Flat Size: 37
+
+(con integer 99)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir
new file mode 100644
index 00000000000..70fc450a718
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir
@@ -0,0 +1,20 @@
+let
+ data Single | Single_match where
+ Single : integer -> Single
+in
+\(d : data) ->
+ Single_match
+ ((let
+ b = list data
+ in
+ /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f])
+ {Single}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ case
+ (list data -> Single)
+ index
+ [(\(ds : list data) -> Single (unIData (headList {data} ds)))]
+ args))
+ {integer}
+ (\(x : integer) -> x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc
new file mode 100644
index 00000000000..d75a2eb61c1
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc
@@ -0,0 +1,10 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ (case
+ (unConstrData d)
+ [ (\index args ->
+ case index [(\ds -> constr 0 [(unIData (force headList ds))])]
+ args) ])
+ [(\x -> x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/Lib.hs b/plutus-tx-plugin/test/IsData/Budget/Lib.hs
new file mode 100644
index 00000000000..3459d439b82
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/Lib.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module IsData.Budget.Lib where
+
+import PlutusTx.Prelude
+
+import PlutusTx.IsData (unstableMakeIsData)
+import PlutusTx.Lift (makeLift)
+
+data Single = Single Integer
+
+unstableMakeIsData ''Single
+makeLift ''Single
+
+data Pair = PairA Integer | PairB Integer
+
+unstableMakeIsData ''Pair
+makeLift ''Pair
+
+data Mixed = MNone | MOne Integer | MTwo Integer Integer
+
+unstableMakeIsData ''Mixed
+makeLift ''Mixed
+
+data ABC = A Integer | B Integer | C Integer
+
+unstableMakeIsData ''ABC
+makeLift ''ABC
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP.hs b/plutus-tx-plugin/test/IsData/Budget/SoP.hs
new file mode 100644
index 00000000000..f41b8253860
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:datatypes=SumsOfProducts #-}
+
+module IsData.Budget.SoP where
+
+import IsData.Budget.Lib
+
+import PlutusTx.Prelude
+
+import PlutusTx.Builtins ()
+import PlutusTx.Code (CompiledCode, unsafeApplyCode)
+import PlutusTx.IsData ()
+import PlutusTx.Lift (liftCodeDef)
+import PlutusTx.TH (compile)
+import PlutusTx.Test (goldenBundle)
+import System.FilePath qualified as Haskell
+import Test.Tasty.Extras (TestNested, testNested, testNestedGhc)
+import Prelude qualified as Haskell
+
+decodeSingle :: CompiledCode (BuiltinData -> Integer)
+decodeSingle =
+ $$( compile
+ [||\d -> case unsafeFromBuiltinData d of Single x -> x||]
+ )
+
+decodePair :: CompiledCode (BuiltinData -> Integer)
+decodePair =
+ $$( compile
+ [||
+ \d -> case unsafeFromBuiltinData d of
+ PairA x -> x
+ PairB x -> x + 1
+ ||]
+ )
+
+decodeMixed :: CompiledCode (BuiltinData -> Integer)
+decodeMixed =
+ $$( compile
+ [||
+ \d -> case unsafeFromBuiltinData d of
+ MNone -> 0
+ MOne x -> x
+ MTwo x y -> x + y
+ ||]
+ )
+
+decodeABC :: CompiledCode (BuiltinData -> Integer)
+decodeABC =
+ $$( compile
+ [||
+ \d -> case unsafeFromBuiltinData d of
+ A x -> x
+ B x -> x + 100
+ C x -> x + 200
+ ||]
+ )
+
+tests :: TestNested
+tests =
+ testNested ("IsData" Haskell.> "Budget" Haskell.> "SoP")
+ . Haskell.pure
+ $ testNestedGhc
+ [ goldenBundle "decodeMixedNone" decodeMixed do
+ decodeMixed `unsafeApplyCode` liftCodeDef (toBuiltinData MNone)
+ , goldenBundle "decodeMixedTwo" decodeMixed do
+ decodeMixed `unsafeApplyCode` liftCodeDef (toBuiltinData (MTwo 3 4))
+ , goldenBundle "decodeSingle" decodeSingle do
+ decodeSingle `unsafeApplyCode` liftCodeDef (toBuiltinData (Single 99))
+ , goldenBundle "decodePairA" decodePair do
+ decodePair `unsafeApplyCode` liftCodeDef (toBuiltinData (PairA 10))
+ , goldenBundle "decodePairB" decodePair do
+ decodePair `unsafeApplyCode` liftCodeDef (toBuiltinData (PairB 20))
+ , goldenBundle "decodeA" decodeABC do
+ decodeABC `unsafeApplyCode` liftCodeDef (toBuiltinData (A 42))
+ , goldenBundle "decodeC" decodeABC do
+ decodeABC `unsafeApplyCode` liftCodeDef (toBuiltinData (C 7))
+ ]
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval
new file mode 100644
index 00000000000..437010f6f4d
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_292_851
+Memory: 4_962
+AST Size: 100
+Flat Size: 113
+
+(con integer 42)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir
new file mode 100644
index 00000000000..95b5dd78fd8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir
@@ -0,0 +1,42 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> B (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) -> C (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc
new file mode 100644
index 00000000000..80725e47b4b
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc
@@ -0,0 +1,42 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay
+ (\ds -> constr 0 [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 2 index)
+ , (delay
+ (\ds ->
+ constr 2
+ [ (unIData
+ (force
+ headList
+ ds)) ]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval
new file mode 100644
index 00000000000..885c9cd3f60
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval
@@ -0,0 +1,6 @@
+CPU: 2_098_823
+Memory: 7_768
+AST Size: 100
+Flat Size: 112
+
+(con integer 207)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir
new file mode 100644
index 00000000000..95b5dd78fd8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir
@@ -0,0 +1,42 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> B (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) -> C (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc
new file mode 100644
index 00000000000..80725e47b4b
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc
@@ -0,0 +1,42 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay
+ (\ds -> constr 0 [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 2 index)
+ , (delay
+ (\ds ->
+ constr 2
+ [ (unIData
+ (force
+ headList
+ ds)) ]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval
new file mode 100644
index 00000000000..97dd29f7c07
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_076_957
+Memory: 4_198
+AST Size: 99
+Flat Size: 106
+
+(con integer 0)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir
new file mode 100644
index 00000000000..96845628636
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir
@@ -0,0 +1,45 @@
+let
+ data Mixed | Mixed_match where
+ MNone : Mixed
+ MOne : integer -> Mixed
+ MTwo : integer -> integer -> Mixed
+in
+\(d : data) ->
+ Mixed_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Mixed}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> MNone)
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> MOne (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) ->
+ MTwo
+ (unIData (headList {data} ds))
+ (unIData (headList {data} (tailList {data} ds))))
+ (/\dead -> error {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed}
+ args))
+ {integer}
+ 0
+ (\(x : integer) -> x)
+ (\(x : integer) (y : integer) -> addInteger x y)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc
new file mode 100644
index 00000000000..2861c935db8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc
@@ -0,0 +1,48 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index
+ args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay (\ds -> constr 0 []))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 2 index)
+ , (delay
+ (\ds ->
+ constr 2
+ [ (unIData
+ (force
+ headList
+ ds))
+ , (unIData
+ (force
+ headList
+ (force
+ tailList
+ ds))) ]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [0, (\x -> x), (\x y -> addInteger x y)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval
new file mode 100644
index 00000000000..e31892500c9
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval
@@ -0,0 +1,6 @@
+CPU: 2_444_380
+Memory: 8_864
+AST Size: 99
+Flat Size: 109
+
+(con integer 7)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir
new file mode 100644
index 00000000000..96845628636
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir
@@ -0,0 +1,45 @@
+let
+ data Mixed | Mixed_match where
+ MNone : Mixed
+ MOne : integer -> Mixed
+ MTwo : integer -> integer -> Mixed
+in
+\(d : data) ->
+ Mixed_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Mixed}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> MNone)
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> MOne (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) ->
+ MTwo
+ (unIData (headList {data} ds))
+ (unIData (headList {data} (tailList {data} ds))))
+ (/\dead -> error {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed}
+ args))
+ {integer}
+ 0
+ (\(x : integer) -> x)
+ (\(x : integer) (y : integer) -> addInteger x y)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc
new file mode 100644
index 00000000000..2861c935db8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc
@@ -0,0 +1,48 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index
+ args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay (\ds -> constr 0 []))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 2 index)
+ , (delay
+ (\ds ->
+ constr 2
+ [ (unIData
+ (force
+ headList
+ ds))
+ , (unIData
+ (force
+ headList
+ (force
+ tailList
+ ds))) ]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [0, (\x -> x), (\x y -> addInteger x y)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval
new file mode 100644
index 00000000000..e3db4dad5ba
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_292_851
+Memory: 4_962
+AST Size: 74
+Flat Size: 83
+
+(con integer 10)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir
new file mode 100644
index 00000000000..f0c27388343
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir
@@ -0,0 +1,34 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> PairA (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> PairB (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Pair})
+ {list data -> Pair})
+ {list data -> Pair}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc
new file mode 100644
index 00000000000..914ce7ee672
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc
@@ -0,0 +1,29 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay
+ (\ds -> constr 0 [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval
new file mode 100644
index 00000000000..38501ab3dec
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_778_441
+Memory: 6_566
+AST Size: 74
+Flat Size: 83
+
+(con integer 21)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir
new file mode 100644
index 00000000000..f0c27388343
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir
@@ -0,0 +1,34 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> PairA (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> PairB (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Pair})
+ {list data -> Pair})
+ {list data -> Pair}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc
new file mode 100644
index 00000000000..914ce7ee672
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc
@@ -0,0 +1,29 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 index)
+ , (delay
+ (\ds -> constr 0 [(unIData (force headList ds))]))
+ , (delay
+ (force
+ (case
+ (constr 0
+ [ (equalsInteger 1 index)
+ , (delay
+ (\ds ->
+ constr 1
+ [(unIData (force headList ds))]))
+ , (delay error) ])
+ [(force ifThenElse)]))) ])
+ [(force ifThenElse)])
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval
new file mode 100644
index 00000000000..8002de6a1da
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_244_851
+Memory: 4_662
+AST Size: 45
+Flat Size: 55
+
+(con integer 99)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir
new file mode 100644
index 00000000000..83be3ca333a
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir
@@ -0,0 +1,25 @@
+let
+ data Single | Single_match where
+ Single : integer -> Single
+in
+\(d : data) ->
+ Single_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Single}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Single}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> Single (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Single})
+ {list data -> Single}
+ args))
+ {integer}
+ (\(x : integer) -> x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc
new file mode 100644
index 00000000000..a0bdabcdb96
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc
@@ -0,0 +1,18 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\args ->
+ force
+ (case
+ (constr 0
+ [ (equalsInteger 0 (force (force fstPair) p))
+ , (delay
+ (\ds -> constr 0 [(unIData (force headList ds))]))
+ , (delay error) ])
+ [(force ifThenElse)])
+ args)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval
new file mode 100644
index 00000000000..3e70914eec3
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_308_851
+Memory: 5_062
+AST Size: 103
+Flat Size: 110
+
+(con integer 42)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir
new file mode 100644
index 00000000000..95b5dd78fd8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir
@@ -0,0 +1,42 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> B (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) -> C (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc
new file mode 100644
index 00000000000..4605836d12d
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc
@@ -0,0 +1,31 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 2 index)
+ (delay
+ (\ds ->
+ constr 2
+ [(unIData (force headList ds))]))
+ (delay error))))))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval
new file mode 100644
index 00000000000..baf113ef56a
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval
@@ -0,0 +1,6 @@
+CPU: 2_146_823
+Memory: 8_068
+AST Size: 103
+Flat Size: 109
+
+(con integer 207)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir
new file mode 100644
index 00000000000..95b5dd78fd8
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir
@@ -0,0 +1,42 @@
+let
+ data ABC | ABC_match where
+ A : integer -> ABC
+ B : integer -> ABC
+ C : integer -> ABC
+in
+\(d : data) ->
+ ABC_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {ABC}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> B (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> ABC}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) -> C (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC})
+ {list data -> ABC}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 100 x)
+ (\(x : integer) -> addInteger 200 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc
new file mode 100644
index 00000000000..4605836d12d
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc
@@ -0,0 +1,31 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 2 index)
+ (delay
+ (\ds ->
+ constr 2
+ [(unIData (force headList ds))]))
+ (delay error))))))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval
new file mode 100644
index 00000000000..1c076998388
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_092_957
+Memory: 4_298
+AST Size: 102
+Flat Size: 102
+
+(con integer 0)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir
new file mode 100644
index 00000000000..96845628636
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir
@@ -0,0 +1,45 @@
+let
+ data Mixed | Mixed_match where
+ MNone : Mixed
+ MOne : integer -> Mixed
+ MTwo : integer -> integer -> Mixed
+in
+\(d : data) ->
+ Mixed_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Mixed}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> MNone)
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> MOne (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) ->
+ MTwo
+ (unIData (headList {data} ds))
+ (unIData (headList {data} (tailList {data} ds))))
+ (/\dead -> error {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed}
+ args))
+ {integer}
+ 0
+ (\(x : integer) -> x)
+ (\(x : integer) (y : integer) -> addInteger x y)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc
new file mode 100644
index 00000000000..54b4049f034
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc
@@ -0,0 +1,34 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 []))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 2 index)
+ (delay
+ (\ds ->
+ constr 2
+ [ (unIData (force headList ds))
+ , (unIData
+ (force headList
+ (force tailList ds))) ]))
+ (delay error))))))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [0, (\x -> x), (\x y -> addInteger x y)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval
new file mode 100644
index 00000000000..f709578c824
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval
@@ -0,0 +1,6 @@
+CPU: 2_492_380
+Memory: 9_164
+AST Size: 102
+Flat Size: 105
+
+(con integer 7)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir
new file mode 100644
index 00000000000..96845628636
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir
@@ -0,0 +1,45 @@
+let
+ data Mixed | Mixed_match where
+ MNone : Mixed
+ MOne : integer -> Mixed
+ MTwo : integer -> integer -> Mixed
+in
+\(d : data) ->
+ Mixed_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Mixed}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 0 index)
+ (/\dead -> \(ds : list data) -> MNone)
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> MOne (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Mixed}
+ (equalsInteger 2 index)
+ (/\dead ->
+ \(ds : list data) ->
+ MTwo
+ (unIData (headList {data} ds))
+ (unIData (headList {data} (tailList {data} ds))))
+ (/\dead -> error {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed})
+ {list data -> Mixed}
+ args))
+ {integer}
+ 0
+ (\(x : integer) -> x)
+ (\(x : integer) (y : integer) -> addInteger x y)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc
new file mode 100644
index 00000000000..54b4049f034
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc
@@ -0,0 +1,34 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 []))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 2 index)
+ (delay
+ (\ds ->
+ constr 2
+ [ (unIData (force headList ds))
+ , (unIData
+ (force headList
+ (force tailList ds))) ]))
+ (delay error))))))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [0, (\x -> x), (\x y -> addInteger x y)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval
new file mode 100644
index 00000000000..cad2b818b29
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_308_851
+Memory: 5_062
+AST Size: 76
+Flat Size: 81
+
+(con integer 10)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir
new file mode 100644
index 00000000000..f0c27388343
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir
@@ -0,0 +1,34 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> PairA (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> PairB (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Pair})
+ {list data -> Pair})
+ {list data -> Pair}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc
new file mode 100644
index 00000000000..f8499f21353
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc
@@ -0,0 +1,23 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay error)))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval
new file mode 100644
index 00000000000..46bdcf59b4f
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_810_441
+Memory: 6_766
+AST Size: 76
+Flat Size: 81
+
+(con integer 21)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir
new file mode 100644
index 00000000000..f0c27388343
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir
@@ -0,0 +1,34 @@
+let
+ data Pair | Pair_match where
+ PairA : integer -> Pair
+ PairB : integer -> Pair
+in
+\(d : data) ->
+ Pair_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Pair}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> PairA (unIData (headList {data} ds)))
+ (/\dead ->
+ ifThenElse
+ {all dead. list data -> Pair}
+ (equalsInteger 1 index)
+ (/\dead ->
+ \(ds : list data) -> PairB (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Pair})
+ {list data -> Pair})
+ {list data -> Pair}
+ args))
+ {integer}
+ (\(x : integer) -> x)
+ (\(x : integer) -> addInteger 1 x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc
new file mode 100644
index 00000000000..f8499f21353
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc
@@ -0,0 +1,23 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\index args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 index)
+ (delay (\ds -> constr 0 [(unIData (force headList ds))]))
+ (delay
+ (force
+ (force ifThenElse
+ (equalsInteger 1 index)
+ (delay
+ (\ds ->
+ constr 1 [(unIData (force headList ds))]))
+ (delay error)))))
+ args)
+ (force (force fstPair) p)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x), (\x -> addInteger 1 x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval
new file mode 100644
index 00000000000..77a03b0bb45
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval
@@ -0,0 +1,6 @@
+CPU: 1_260_851
+Memory: 4_762
+AST Size: 46
+Flat Size: 54
+
+(con integer 99)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir
new file mode 100644
index 00000000000..83be3ca333a
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir
@@ -0,0 +1,25 @@
+let
+ data Single | Single_match where
+ Single : integer -> Single
+in
+\(d : data) ->
+ Single_match
+ ((let
+ b = list data
+ in
+ /\r ->
+ \(p : pair integer b) (f : integer -> b -> r) ->
+ f (fstPair {integer} {b} p) (sndPair {integer} {b} p))
+ {Single}
+ (unConstrData d)
+ (\(index : integer) (args : list data) ->
+ ifThenElse
+ {all dead. list data -> Single}
+ (equalsInteger 0 index)
+ (/\dead ->
+ \(ds : list data) -> Single (unIData (headList {data} ds)))
+ (/\dead -> error {list data -> Single})
+ {list data -> Single}
+ args))
+ {integer}
+ (\(x : integer) -> x)
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc
new file mode 100644
index 00000000000..c627974b1b3
--- /dev/null
+++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc
@@ -0,0 +1,15 @@
+(program
+ 1.1.0
+ (\d ->
+ case
+ ((\p ->
+ (\args ->
+ force
+ (force ifThenElse
+ (equalsInteger 0 (force (force fstPair) p))
+ (delay (\ds -> constr 0 [(unIData (force headList ds))]))
+ (delay error))
+ args)
+ (force (force sndPair) p))
+ (unConstrData d))
+ [(\x -> x)]))
\ No newline at end of file
diff --git a/plutus-tx-plugin/test/Spec.hs b/plutus-tx-plugin/test/Spec.hs
index 059283d075a..931d7c8b4d0 100644
--- a/plutus-tx-plugin/test/Spec.hs
+++ b/plutus-tx-plugin/test/Spec.hs
@@ -14,6 +14,8 @@ import IntegerLiterals.NoStrict.NegativeLiterals.Spec qualified
import IntegerLiterals.NoStrict.NoNegativeLiterals.Spec qualified
import IntegerLiterals.Strict.NegativeLiterals.Spec qualified
import IntegerLiterals.Strict.NoNegativeLiterals.Spec qualified
+import IsData.Budget.BuiltinCasing qualified as IsData.Budget.BuiltinCasing
+import IsData.Budget.SoP qualified as IsData.Budget.SoP
import IsData.Spec qualified as IsData
import Lift.Spec qualified as Lift
import List.Spec qualified as List
@@ -43,6 +45,8 @@ tests =
, IntegerLiterals.Strict.NoNegativeLiterals.Spec.tests
, embed ByteStringLiterals.tests
, IsData.tests
+ , IsData.Budget.SoP.tests
+ , IsData.Budget.BuiltinCasing.tests
, Lift.tests
, TH.tests
, Lib.tests
diff --git a/plutus-tx/CHANGELOG.md b/plutus-tx/CHANGELOG.md
index 52ca625c262..e3967382f02 100644
--- a/plutus-tx/CHANGELOG.md
+++ b/plutus-tx/CHANGELOG.md
@@ -1,4 +1,18 @@
+
+# 1.56.0.1 — 2026-04-07
+
+## Added
+
+- Brought back Ratio.from/toGHC as deprecated.
+
+- A `deriveEnum` command to derive PlutusTx.Enum instances for datatypes/newtypes, similar to Haskell's
+ `deriving stock Enum`
+
+## Fixed
+
+- Fixed the `Enum PlutusTx.Rational` to be compilable with plc compiler
+
# 1.56.0.0 — 2025-11-27
diff --git a/plutus-tx/changelog.d/20251127_160027_bezirg.md b/plutus-tx/changelog.d/20251127_160027_bezirg.md
deleted file mode 100644
index 5caba6dfc8c..00000000000
--- a/plutus-tx/changelog.d/20251127_160027_bezirg.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Added
-
-- Brought back Ratio.from/toGHC as deprecated.
diff --git a/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md b/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md
deleted file mode 100644
index 2b50d84ad06..00000000000
--- a/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Fixed
-
-- Fixed the `Enum PlutusTx.Rational` to be compilable with plc compiler
diff --git a/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md b/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md
deleted file mode 100644
index cc0ef211ac2..00000000000
--- a/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md
+++ /dev/null
@@ -1,4 +0,0 @@
-### Added
-
-- A `deriveEnum` command to derive PlutusTx.Enum instances for datatypes/newtypes, similar to Haskell's
- `deriving stock Enum`
diff --git a/plutus-tx/plutus-tx.cabal b/plutus-tx/plutus-tx.cabal
index e03751dc9ea..033ac35be43 100644
--- a/plutus-tx/plutus-tx.cabal
+++ b/plutus-tx/plutus-tx.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: plutus-tx
-version: 1.56.0.0
+version: 1.56.0.1
license: Apache-2.0
license-files:
LICENSE