@@ -6,7 +6,7 @@ module Data.Enum
6
6
, enumFromThenTo
7
7
, upFrom
8
8
, downFrom
9
- , Cardinality (..), runCardinality
9
+ , Cardinality (..)
10
10
, class BoundedEnum , cardinality , toEnum , fromEnum , toEnumWithDefaults
11
11
, defaultCardinality
12
12
, defaultToEnum
@@ -20,15 +20,19 @@ import Control.MonadPlus (guard)
20
20
import Data.Char (fromCharCode , toCharCode )
21
21
import Data.Either (Either (..))
22
22
import Data.Maybe (Maybe (..), maybe , fromJust )
23
+ import Data.Newtype (class Newtype , unwrap )
23
24
import Data.Tuple (Tuple (..))
24
25
import Data.Unfoldable (class Unfoldable , unfoldr )
25
26
26
27
import Partial.Unsafe (unsafePartial )
27
28
28
29
newtype Cardinality a = Cardinality Int
29
30
30
- runCardinality :: forall a . Cardinality a -> Int
31
- runCardinality (Cardinality a) = a
31
+ derive instance newtypeCardinality :: Newtype (Cardinality a ) _
32
+
33
+ derive newtype instance eqCardinality :: Eq (Cardinality a )
34
+
35
+ derive newtype instance ordCardinality :: Ord (Cardinality a )
32
36
33
37
-- | Type class for enumerations.
34
38
-- |
@@ -188,7 +192,7 @@ instance boundedEnumOrdering :: BoundedEnum Ordering where
188
192
fromEnum GT = 2
189
193
190
194
instance boundedEnumMaybe :: BoundedEnum a => BoundedEnum (Maybe a ) where
191
- cardinality = Cardinality $ runCardinality (cardinality :: Cardinality a ) + 1
195
+ cardinality = Cardinality $ unwrap (cardinality :: Cardinality a ) + 1
192
196
toEnum = to cardinality
193
197
where
194
198
to :: Cardinality a -> Int -> Maybe (Maybe a )
@@ -201,8 +205,8 @@ instance boundedEnumMaybe :: BoundedEnum a => BoundedEnum (Maybe a) where
201
205
instance boundedEnumEither :: (BoundedEnum a , BoundedEnum b ) => BoundedEnum (Either a b ) where
202
206
cardinality =
203
207
Cardinality
204
- $ runCardinality (cardinality :: Cardinality a )
205
- + runCardinality (cardinality :: Cardinality b )
208
+ $ unwrap (cardinality :: Cardinality a )
209
+ + unwrap (cardinality :: Cardinality b )
206
210
toEnum = to cardinality cardinality
207
211
where
208
212
to :: Cardinality a -> Cardinality (Either a b ) -> Int -> Maybe (Either a b )
@@ -211,13 +215,13 @@ instance boundedEnumEither :: (BoundedEnum a, BoundedEnum b) => BoundedEnum (Eit
211
215
| n >= ca && n < cab = Right <$> toEnum (n - ca)
212
216
| otherwise = Nothing
213
217
fromEnum (Left a) = fromEnum a
214
- fromEnum (Right b) = fromEnum b + runCardinality (cardinality :: Cardinality a )
218
+ fromEnum (Right b) = fromEnum b + unwrap (cardinality :: Cardinality a )
215
219
216
220
instance boundedEnumTuple :: (BoundedEnum a , BoundedEnum b ) => BoundedEnum (Tuple a b ) where
217
221
cardinality =
218
222
Cardinality
219
- $ runCardinality (cardinality :: Cardinality a )
220
- * runCardinality (cardinality :: Cardinality b )
223
+ $ unwrap (cardinality :: Cardinality a )
224
+ * unwrap (cardinality :: Cardinality b )
221
225
toEnum = to cardinality
222
226
where
223
227
to :: Cardinality b -> Int -> Maybe (Tuple a b )
0 commit comments