Skip to content

Commit f96714c

Browse files
authored
Refactor PlutusTx.Enum module with default methods (#7451)
Co-authored-by: Nikolaos Bezirgiannis <bezirg@users.noreply.github.com>
1 parent 5354949 commit f96714c

File tree

7 files changed

+30
-37
lines changed

7 files changed

+30
-37
lines changed

plutus-tx-plugin/test/Budget/9.6/map1.golden.pir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ letrec
44
Cons : a -> List a -> List a
55
in
66
letrec
7-
!`$fEnumBool_$cenumFromTo` : integer -> integer -> List integer
7+
!`$dmenumFromTo_$cenumFromTo` : integer -> integer -> List integer
88
= \(x : integer) (lim : integer) ->
99
case
1010
(all dead. List integer)
@@ -13,7 +13,7 @@ letrec
1313
Cons
1414
{integer}
1515
x
16-
(`$fEnumBool_$cenumFromTo` (addInteger 1 x) lim))
16+
(`$dmenumFromTo_$cenumFromTo` (addInteger 1 x) lim))
1717
, (/\dead -> Nil {integer}) ]
1818
{all dead. dead}
1919
in
@@ -128,7 +128,7 @@ in
128128
in
129129
go ds)
130130
(mkCons {pair data data} (mkPairData (iData n) (I 0)) [])
131-
(`$fEnumBool_$cenumFromTo` 1 10)
131+
(`$dmenumFromTo_$cenumFromTo` 1 10)
132132
!nt : list (pair data data)
133133
= (let
134134
!k : data = iData (addInteger 5 n)

plutus-tx-plugin/test/Budget/9.6/map1.golden.uplc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(program
22
1.1.0
3-
((\`$fEnumBool_$cenumFromTo` n ->
3+
((\`$dmenumFromTo_$cenumFromTo` n ->
44
(\nt ->
55
(\nt ->
66
(\lookup ->
@@ -76,7 +76,7 @@
7676
(iData (addInteger n y)))
7777
(s s ys)) ])))
7878
(force mkCons (mkPairData (iData n) (I 0)) [])
79-
(`$fEnumBool_$cenumFromTo` 1 10)))
79+
(`$dmenumFromTo_$cenumFromTo` 1 10)))
8080
((\s -> s s)
8181
(\s x lim ->
8282
case

plutus-tx-plugin/test/Budget/9.6/show.golden.pir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ let
221221
= /\a -> \(b : bool) (x : a) (y : a) -> case a b [y, x]
222222
in
223223
letrec
224-
!`$fEnumBool_$cenumFromTo` : integer -> integer -> List integer
224+
!`$dmenumFromTo_$cenumFromTo` : integer -> integer -> List integer
225225
= \(x : integer) (lim : integer) ->
226226
case
227227
(all dead. List integer)
@@ -230,7 +230,7 @@ letrec
230230
Cons
231231
{integer}
232232
x
233-
(`$fEnumBool_$cenumFromTo` (addInteger 1 x) lim))
233+
(`$dmenumFromTo_$cenumFromTo` (addInteger 1 x) lim))
234234
, (/\dead -> Nil {integer}) ]
235235
{all dead. dead}
236236
in
@@ -361,7 +361,7 @@ let
361361
= trace
362362
{integer}
363363
(concatBuiltinStrings
364-
(go (`$fEnumBool_$cenumFromTo` 0 17) (Nil {string})))
364+
(go (`$dmenumFromTo_$cenumFromTo` 0 17) (Nil {string})))
365365
b
366366
!d : integer
367367
= trace

plutus-tx-plugin/test/Budget/9.6/show.golden.uplc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(\`$fShowBuiltinByteString_$cshowsPrec` ->
66
(\toHex ->
77
(\go ->
8-
(\`$fEnumBool_$cenumFromTo` ->
8+
(\`$dmenumFromTo_$cenumFromTo` ->
99
(\go ->
1010
(\go ->
1111
(\concatBuiltinStrings ->
@@ -126,10 +126,11 @@
126126
0)
127127
["True", "False"])
128128
c))
129-
(force trace
129+
(force
130+
trace
130131
(concatBuiltinStrings
131132
(go
132-
(`$fEnumBool_$cenumFromTo`
133+
(`$dmenumFromTo_$cenumFromTo`
133134
0
134135
17)
135136
(constr 0 [])))

plutus-tx-plugin/test/Budget/9.6/sumL.golden.pir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ letrec
1616
{all dead. dead}
1717
in
1818
letrec
19-
!`$fEnumBool_$cenumFromTo` : integer -> integer -> List integer
19+
!`$dmenumFromTo_$cenumFromTo` : integer -> integer -> List integer
2020
= \(x : integer) (lim : integer) ->
2121
case
2222
(all dead. List integer)
@@ -25,11 +25,11 @@ letrec
2525
Cons
2626
{integer}
2727
x
28-
(`$fEnumBool_$cenumFromTo` (addInteger 1 x) lim))
28+
(`$dmenumFromTo_$cenumFromTo` (addInteger 1 x) lim))
2929
, (/\dead -> Nil {integer}) ]
3030
{all dead. dead}
3131
in
3232
let
33-
!ls : List integer = `$fEnumBool_$cenumFromTo` 1 1000
33+
!ls : List integer = `$dmenumFromTo_$cenumFromTo` 1 1000
3434
in
3535
go 0 ls

plutus-tx-plugin/test/Budget/9.6/sumR.golden.pir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ letrec
1515
{all dead. dead}
1616
in
1717
letrec
18-
!`$fEnumBool_$cenumFromTo` : integer -> integer -> List integer
18+
!`$dmenumFromTo_$cenumFromTo` : integer -> integer -> List integer
1919
= \(x : integer) (lim : integer) ->
2020
case
2121
(all dead. List integer)
@@ -24,11 +24,11 @@ letrec
2424
Cons
2525
{integer}
2626
x
27-
(`$fEnumBool_$cenumFromTo` (addInteger 1 x) lim))
27+
(`$dmenumFromTo_$cenumFromTo` (addInteger 1 x) lim))
2828
, (/\dead -> Nil {integer}) ]
2929
{all dead. dead}
3030
in
3131
let
32-
!ls : List integer = `$fEnumBool_$cenumFromTo` 1 1000
32+
!ls : List integer = `$dmenumFromTo_$cenumFromTo` 1 1000
3333
in
3434
go ls

plutus-tx/src/PlutusTx/Enum.hs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
{-# LANGUAGE OverloadedStrings #-}
21
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
32

43
module PlutusTx.Enum (Enum (..)) where
@@ -13,6 +12,7 @@ import PlutusTx.Trace
1312

1413
-- | Class 'Enum' defines operations on sequentially ordered types.
1514
class Enum a where
15+
{-# MINIMAL toEnum, fromEnum #-}
1616
{-| The successor of a value. For numeric types, 'succ' adds 1.
1717
1818
For types that implement 'Ord', @succ x@ should be the least element
@@ -42,6 +42,17 @@ class Enum a where
4242
-}
4343
enumFromThenTo :: a -> a -> a -> [a]
4444

45+
{-# INLINEABLE succ #-}
46+
succ x = toEnum ((`addInteger` 1) (fromEnum x))
47+
{-# INLINEABLE pred #-}
48+
pred x = toEnum ((`subtractInteger` 1) (fromEnum x))
49+
50+
{-# INLINEABLE enumFromTo #-}
51+
enumFromTo x lim = map toEnum (enumFromTo (fromEnum x) (fromEnum lim))
52+
53+
{-# INLINEABLE enumFromThenTo #-}
54+
enumFromThenTo x y lim = map toEnum (enumFromThenTo (fromEnum x) (fromEnum y) (fromEnum lim))
55+
4556
instance Enum Integer where
4657
{-# INLINEABLE succ #-}
4758
succ x = addInteger x 1
@@ -91,13 +102,6 @@ instance Enum () where
91102
{-# INLINEABLE fromEnum #-}
92103
fromEnum () = 0
93104

94-
{-# INLINEABLE enumFromTo #-}
95-
enumFromTo _ _ = [()]
96-
97-
{-# INLINEABLE enumFromThenTo #-}
98-
-- enumFromThenTo () () () is an infinite list of ()'s, so this isn't too useful.
99-
enumFromThenTo x y lim = map toEnum (enumFromThenTo (fromEnum x) (fromEnum y) (fromEnum lim))
100-
101105
instance Enum Bool where
102106
{-# INLINEABLE succ #-}
103107
succ False = True
@@ -117,12 +121,6 @@ instance Enum Bool where
117121
fromEnum False = 0
118122
fromEnum True = 1
119123

120-
{-# INLINEABLE enumFromTo #-}
121-
enumFromTo x lim = map toEnum (enumFromTo (fromEnum x) (fromEnum lim))
122-
123-
{-# INLINEABLE enumFromThenTo #-}
124-
enumFromThenTo x y lim = map toEnum (enumFromThenTo (fromEnum x) (fromEnum y) (fromEnum lim))
125-
126124
instance Enum Ordering where
127125
{-# INLINEABLE succ #-}
128126
succ LT = EQ
@@ -145,9 +143,3 @@ instance Enum Ordering where
145143
fromEnum LT = 0
146144
fromEnum EQ = 1
147145
fromEnum GT = 2
148-
149-
{-# INLINEABLE enumFromTo #-}
150-
enumFromTo x y = map toEnum (enumFromTo (fromEnum x) (fromEnum y))
151-
152-
{-# INLINEABLE enumFromThenTo #-}
153-
enumFromThenTo x y lim = map toEnum (enumFromThenTo (fromEnum x) (fromEnum y) (fromEnum lim))

0 commit comments

Comments
 (0)