Skip to content

Commit 990d1c6

Browse files
committed
Merge pull request #4 from jdegoes/ready/either-instance
added Enum instance for Either
2 parents d28e6fc + adbdf45 commit 990d1c6

File tree

5 files changed

+37
-4
lines changed

5 files changed

+37
-4
lines changed

Gruntfile.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,25 @@ module.exports = function(grunt) {
1818
src: "src/**/*.purs",
1919
dest: "README.md"
2020
}
21+
},
22+
jsvalidate: {
23+
options:{
24+
globals: {},
25+
esprimaOptions: {},
26+
verbose: false
27+
},
28+
targetName:{
29+
files:{
30+
src: ['output/Data.Enum/*.js']
31+
}
32+
}
2133
}
22-
2334
});
2435

36+
grunt.loadNpmTasks('grunt-jsvalidate');
2537
grunt.loadNpmTasks("grunt-contrib-clean");
2638
grunt.loadNpmTasks("grunt-purescript");
2739

28-
grunt.registerTask("make", ["pscMake", "dotPsci", "docgen"]);
40+
grunt.registerTask("make", ["pscMake", "dotPsci", "docgen", "jsvalidate"]);
2941
grunt.registerTask("default", ["make"]);
3042
};

README.md

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

2525
instance enumChar :: Enum Char
2626

27+
instance enumEither :: (Enum a, Enum b) => Enum (Either a b)
28+
2729
instance enumMaybe :: (Enum a) => Enum (Maybe a)
2830

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

bower.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"dependencies": {
2121
"purescript-maybe": "~0.2.1",
2222
"purescript-tuples": "~0.2.1",
23+
"purescript-either": "~0.1.3",
2324
"purescript-strings": "~0.3.2"
2425
}
2526
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"dependencies": {
44
"grunt": "~0.4.4",
55
"grunt-purescript": "~0.5.1",
6-
"grunt-contrib-clean": "~0.5.0"
6+
"grunt-contrib-clean": "~0.5.0",
7+
"grunt-jsvalidate": "~0.2.2"
78
}
89
}

src/Data/Enum.purs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module Data.Enum
1212
) where
1313

1414
import Data.Maybe
15+
import Data.Either
1516
import Data.Tuple
1617
import Data.Char
1718
import Data.Maybe.Unsafe
@@ -105,4 +106,20 @@ module Data.Enum
105106
pred (Tuple a b) = maybe (flip Tuple firstEnum <$> pred a) (Just <<< Tuple a) (pred b)
106107

107108
tupleCardinality :: forall a b. (Enum a, Enum b) => Cardinality a -> Cardinality b -> Cardinality (Tuple a b)
108-
tupleCardinality l r = Cardinality $ (runCardinality l) * (runCardinality r)
109+
tupleCardinality l r = Cardinality $ (runCardinality l) * (runCardinality r)
110+
111+
instance enumEither :: (Enum a, Enum b) => Enum (Either a b) where
112+
cardinality = eitherCardinality cardinality cardinality
113+
114+
firstEnum = Left firstEnum
115+
116+
lastEnum = Right lastEnum
117+
118+
succ (Left a) = maybe (Just $ Right firstEnum) (Just <<< Left) (succ a)
119+
succ (Right b) = maybe (Nothing) (Just <<< Right) (succ b)
120+
121+
pred (Left a) = maybe (Nothing) (Just <<< Left) (pred a)
122+
pred (Right b) = maybe (Just $ Left lastEnum) (Just <<< Right) (pred b)
123+
124+
eitherCardinality :: forall a b. (Enum a, Enum b) => Cardinality a -> Cardinality b -> Cardinality (Either a b)
125+
eitherCardinality l r = Cardinality $ (runCardinality l) + (runCardinality r)

0 commit comments

Comments
 (0)