Skip to content

Commit d28e6fc

Browse files
committed
Merge pull request #3 from jdegoes/ready/char-instance
add Enum instance for Char, fix all versions
2 parents da48810 + 15e4f2a commit d28e6fc

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
instance enumBoolean :: Enum Boolean
2424

25+
instance enumChar :: Enum Char
26+
2527
instance enumMaybe :: (Enum a) => Enum (Maybe a)
2628

2729
instance enumTuple :: (Enum a, Enum b) => Enum (Tuple a b)

bower.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"package.json"
1919
],
2020
"dependencies": {
21-
"purescript-maybe": "*",
22-
"purescript-tuples": "*"
21+
"purescript-maybe": "~0.2.1",
22+
"purescript-tuples": "~0.2.1",
23+
"purescript-strings": "~0.3.2"
2324
}
2425
}

src/Data/Enum.purs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module Data.Enum
1313

1414
import Data.Maybe
1515
import Data.Tuple
16+
import Data.Char
1617
import Data.Maybe.Unsafe
1718

1819
newtype Cardinality a = Cardinality Number
@@ -55,6 +56,17 @@ module Data.Enum
5556
maybeCardinality :: forall a. (Enum a) => Cardinality a -> Cardinality (Maybe a)
5657
maybeCardinality c = Cardinality $ 1 + (runCardinality c)
5758

59+
instance enumChar :: Enum Char where
60+
cardinality = Cardinality (65535 + 1)
61+
62+
firstEnum = fromCharCode 0
63+
64+
lastEnum = fromCharCode 65535
65+
66+
succ c = if c == lastEnum then Nothing else Just $ (fromCharCode <<< ((+) 1) <<< toCharCode) c
67+
68+
pred c = if c == firstEnum then Nothing else Just $ (fromCharCode <<< ((+) (-1)) <<< toCharCode) c
69+
5870
instance enumMaybe :: (Enum a) => Enum (Maybe a) where
5971
cardinality = maybeCardinality cardinality
6072

0 commit comments

Comments
 (0)