Skip to content

Commit

Permalink
Fix union implementation
Browse files Browse the repository at this point in the history
Signed-off-by: Ana Pantilie <ana.pantilie95@gmail.com>
  • Loading branch information
ana-pantilie committed May 8, 2024
1 parent 0b51d91 commit 75edbf9
Show file tree
Hide file tree
Showing 7 changed files with 294 additions and 271 deletions.
4 changes: 2 additions & 2 deletions plutus-tx-plugin/test/Budget/9.6/map1-budget.budget.golden
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
({cpu: 447446976
| mem: 1083517})
({cpu: 462682968
| mem: 1158673})
143 changes: 66 additions & 77 deletions plutus-tx-plugin/test/Budget/9.6/map1.pir.golden
Original file line number Diff line number Diff line change
Expand Up @@ -230,51 +230,46 @@ let
(\a -> a -> data) k ->
(\a -> data -> a) a ->
k ->
(\k a -> data) k a ->
(\k a -> list (pair data data)) k a ->
Maybe a
= /\k a ->
\(`$dToData` : (\a -> a -> data) k)
(`$dUnsafeFromData` : (\a -> data -> a) a)
(ds : k)
(m : (\k a -> data) k a) ->
Maybe_match
{data}
(let
!k : data = `$dToData` ds
in
letrec
!go : list (pair data data) -> Maybe data
= \(xs : list (pair data data)) ->
chooseList
{pair data data}
{Unit -> Maybe data}
xs
(\(ds : Unit) -> Nothing {data})
(\(ds : Unit) ->
let
!hd : pair data data = headList {pair data data} xs
in
ifThenElse
{all dead. Maybe data}
(equalsData k (fstPair {data} {data} hd))
(/\dead ->
let
!ds : list (pair data data)
= tailList {pair data data} xs
in
Just {data} (sndPair {data} {data} hd))
(/\dead -> go (tailList {pair data data} xs))
{all dead. dead})
Unit
in
let
!eta : list (pair data data) = unMapData m
in
go eta)
{all dead. Maybe a}
(\(a : data) -> /\dead -> Just {a} (`$dUnsafeFromData` a))
(/\dead -> Nothing {a})
{all dead. dead}
(ds : k) ->
letrec
!go : list (pair data data) -> Maybe data
= \(xs : list (pair data data)) ->
chooseList
{pair data data}
{Unit -> Maybe data}
xs
(\(ds : Unit) -> Nothing {data})
(\(ds : Unit) ->
let
!hd : pair data data = headList {pair data data} xs
!k' : data = fstPair {data} {data} hd
in
ifThenElse
{all dead. Maybe data}
(equalsData (`$dToData` ds) k')
(/\dead ->
let
!ds : list (pair data data)
= tailList {pair data data} xs
in
Just {data} (sndPair {data} {data} hd))
(/\dead -> go (tailList {pair data data} xs))
{all dead. dead})
Unit
in
\(ds : (\k a -> list (pair data data)) k a) ->
Maybe_match
{data}
(go ds)
{all dead. Maybe a}
(\(a : data) -> /\dead -> Just {a} (`$dUnsafeFromData` a))
(/\dead -> Nothing {a})
{all dead. dead}
!matchList : all a r. list a -> r -> (a -> list a -> r) -> r
= /\a r ->
\(l : list a) (nilCase : r) (consCase : a -> list a -> r) ->
Expand All @@ -291,9 +286,9 @@ let
in
\(n : integer) ->
let
!nt : data
!nt : list (pair data data)
= (let
b = (\k a -> data) integer bytestring
b = (\k a -> list (pair data data)) integer bytestring
in
\(k : integer -> b -> b) (z : b) ->
letrec
Expand All @@ -312,48 +307,42 @@ in
(\(i : integer) ->
let
!ds : integer = addInteger n i
~k : data = iData ds
!ds : bytestring
= encodeUtf8
(concatBuiltinStrings
(`$fShowBuiltinByteString_$cshowsPrec`
0
i
(Nil {string})))
~a : data = bData ds
in
\(m : (\k a -> data) integer bytestring) ->
mapData
(let
!ds : data = iData ds
!ds : data = bData ds
in
letrec
!go : list (pair data data) -> list (pair data data)
= \(xs : list (pair data data)) ->
matchList
{pair data data}
{list (pair data data)}
xs
(mkCons {pair data data} (mkPairData ds ds) [])
(\(hd : pair data data)
(tl : list (pair data data)) ->
ifThenElse
{all dead. list (pair data data)}
(equalsData ds (fstPair {data} {data} hd))
(/\dead ->
mkCons
{pair data data}
(mkPairData ds ds)
tl)
(/\dead -> mkCons {pair data data} hd (go tl))
{all dead. dead})
in
let
!eta : list (pair data data) = unMapData m
in
go eta))
(mapData (mkCons {pair data data} (mkPairData (iData n) (B #30)) []))
letrec
!go : list (pair data data) -> list (pair data data)
= \(xs : list (pair data data)) ->
matchList
{pair data data}
{list (pair data data)}
xs
(mkCons {pair data data} (mkPairData k a) [])
(\(hd : pair data data) (tl : list (pair data data)) ->
let
!k' : data = fstPair {data} {data} hd
!d : data = k
in
ifThenElse
{all dead. list (pair data data)}
(equalsData d k')
(/\dead ->
mkCons {pair data data} (mkPairData d a) tl)
(/\dead -> mkCons {pair data data} hd (go tl))
{all dead. dead})
in
\(ds : (\k a -> list (pair data data)) integer bytestring) ->
go ds)
(mkCons {pair data data} (mkPairData (iData n) (B #30)) [])
(`$fEnumBool_$cenumFromTo` 1 10)
!nt : data
!nt : list (pair data data)
= let
!ds : integer = addInteger 5 n
in
Expand All @@ -376,7 +365,7 @@ in
(/\dead -> mkCons {pair data data} hd (go tl))
{all dead. dead})
in
mapData (go (unMapData nt))
go nt
in
Tuple5
{Maybe bytestring}
Expand Down

0 comments on commit 75edbf9

Please sign in to comment.