From adbdf4507dbba4ce867bd80ad5d1f3b348f539ea Mon Sep 17 00:00:00 2001 From: "John A. De Goes" Date: Fri, 17 Oct 2014 18:46:09 -0600 Subject: [PATCH] added Enum instance for Either --- Gruntfile.js | 16 ++++++++++++++-- README.md | 2 ++ bower.json | 1 + package.json | 3 ++- src/Data/Enum.purs | 19 ++++++++++++++++++- 5 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index ed5a3d2..d21644f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -18,13 +18,25 @@ module.exports = function(grunt) { src: "src/**/*.purs", dest: "README.md" } + }, + jsvalidate: { + options:{ + globals: {}, + esprimaOptions: {}, + verbose: false + }, + targetName:{ + files:{ + src: ['output/Data.Enum/*.js'] + } + } } - }); + grunt.loadNpmTasks('grunt-jsvalidate'); grunt.loadNpmTasks("grunt-contrib-clean"); grunt.loadNpmTasks("grunt-purescript"); - grunt.registerTask("make", ["pscMake", "dotPsci", "docgen"]); + grunt.registerTask("make", ["pscMake", "dotPsci", "docgen", "jsvalidate"]); grunt.registerTask("default", ["make"]); }; diff --git a/README.md b/README.md index 4eb2511..ca6cae5 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ instance enumChar :: Enum Char + instance enumEither :: (Enum a, Enum b) => Enum (Either a b) + instance enumMaybe :: (Enum a) => Enum (Maybe a) instance enumTuple :: (Enum a, Enum b) => Enum (Tuple a b) diff --git a/bower.json b/bower.json index 0dfa19f..71925b5 100644 --- a/bower.json +++ b/bower.json @@ -20,6 +20,7 @@ "dependencies": { "purescript-maybe": "~0.2.1", "purescript-tuples": "~0.2.1", + "purescript-either": "~0.1.3", "purescript-strings": "~0.3.2" } } diff --git a/package.json b/package.json index fa4a87c..8a6ca09 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "dependencies": { "grunt": "~0.4.4", "grunt-purescript": "~0.5.1", - "grunt-contrib-clean": "~0.5.0" + "grunt-contrib-clean": "~0.5.0", + "grunt-jsvalidate": "~0.2.2" } } diff --git a/src/Data/Enum.purs b/src/Data/Enum.purs index 467ed7b..9b31f86 100644 --- a/src/Data/Enum.purs +++ b/src/Data/Enum.purs @@ -12,6 +12,7 @@ module Data.Enum ) where import Data.Maybe + import Data.Either import Data.Tuple import Data.Char import Data.Maybe.Unsafe @@ -105,4 +106,20 @@ module Data.Enum pred (Tuple a b) = maybe (flip Tuple firstEnum <$> pred a) (Just <<< Tuple a) (pred b) tupleCardinality :: forall a b. (Enum a, Enum b) => Cardinality a -> Cardinality b -> Cardinality (Tuple a b) - tupleCardinality l r = Cardinality $ (runCardinality l) * (runCardinality r) \ No newline at end of file + tupleCardinality l r = Cardinality $ (runCardinality l) * (runCardinality r) + + instance enumEither :: (Enum a, Enum b) => Enum (Either a b) where + cardinality = eitherCardinality cardinality cardinality + + firstEnum = Left firstEnum + + lastEnum = Right lastEnum + + succ (Left a) = maybe (Just $ Right firstEnum) (Just <<< Left) (succ a) + succ (Right b) = maybe (Nothing) (Just <<< Right) (succ b) + + pred (Left a) = maybe (Nothing) (Just <<< Left) (pred a) + pred (Right b) = maybe (Just $ Left lastEnum) (Just <<< Right) (pred b) + + eitherCardinality :: forall a b. (Enum a, Enum b) => Cardinality a -> Cardinality b -> Cardinality (Either a b) + eitherCardinality l r = Cardinality $ (runCardinality l) + (runCardinality r) \ No newline at end of file