1- {-# LANGUAGE OverloadedStrings #-}
21{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
32
43module PlutusTx.Enum (Enum (.. )) where
@@ -13,6 +12,7 @@ import PlutusTx.Trace
1312
1413-- | Class 'Enum' defines operations on sequentially ordered types.
1514class 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+
4556instance 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-
101105instance 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-
126124instance 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