From 1c71b30e289d98ae6ed31c796e29dca32e948e8b Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 6 Nov 2017 15:59:27 +0000 Subject: [PATCH 1/2] Add Foldable and Traversable instances for V --- bower.json | 3 ++- src/Data/Validation/Semigroup.purs | 12 +++++++++++- src/Data/Validation/Semiring.purs | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index aee9ca4..f8b58b3 100644 --- a/bower.json +++ b/bower.json @@ -18,6 +18,7 @@ ], "dependencies": { "purescript-bifunctors": "^3.0.0", - "purescript-monoid": "^3.0.0" + "purescript-monoid": "^3.0.0", + "purescript-foldable-traversable": "^3.6.1" } } diff --git a/src/Data/Validation/Semigroup.purs b/src/Data/Validation/Semigroup.purs index 8a39e28..52d922d 100644 --- a/src/Data/Validation/Semigroup.purs +++ b/src/Data/Validation/Semigroup.purs @@ -14,9 +14,10 @@ module Data.Validation.Semigroup import Prelude import Control.Apply (lift2) - import Data.Bifunctor (class Bifunctor) +import Data.Foldable (class Foldable) import Data.Monoid (class Monoid, mempty) +import Data.Traversable (class Traversable) -- | The `V` functor, used for applicative validation -- | @@ -79,3 +80,12 @@ instance semigroupV :: (Semigroup err, Semigroup a) => Semigroup (V err a) where instance monoidV :: (Semigroup err, Monoid a) => Monoid (V err a) where mempty = pure mempty + +instance foldableV :: Foldable (V err) where + foldMap = unV (const mempty) + foldr f b = unV (const b) (flip f b) + foldl f b = unV (const b) (f b) + +instance traversableV :: Traversable (V err) where + sequence = unV (pure <<< Invalid) (map Valid) + traverse f = unV (pure <<< Invalid) (map Valid <<< f) diff --git a/src/Data/Validation/Semiring.purs b/src/Data/Validation/Semiring.purs index 553b4f5..30fe299 100644 --- a/src/Data/Validation/Semiring.purs +++ b/src/Data/Validation/Semiring.purs @@ -14,12 +14,13 @@ module Data.Validation.Semiring import Prelude import Control.Alt (class Alt) +import Control.Alternative (class Alternative) import Control.Apply (lift2) import Control.Plus (class Plus) -import Control.Alternative (class Alternative) - import Data.Bifunctor (class Bifunctor) +import Data.Foldable (class Foldable) import Data.Monoid (class Monoid, mempty) +import Data.Traversable (class Traversable) -- | The `V` functor, used for alternative validation -- | @@ -94,3 +95,12 @@ instance plusV :: (Semiring err) => Plus (V err) where empty = Invalid zero instance alernativeV :: (Semiring err) => Alternative (V err) + +instance foldableV :: Foldable (V err) where + foldMap = unV (const mempty) + foldr f b = unV (const b) (flip f b) + foldl f b = unV (const b) (f b) + +instance traversableV :: Traversable (V err) where + sequence = unV (pure <<< Invalid) (map Valid) + traverse f = unV (pure <<< Invalid) (map Valid <<< f) From a71a7d67e97b0a4e92188dfd3548f075e5db2eb1 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 6 Nov 2017 16:02:00 +0000 Subject: [PATCH 2/2] Ignore npm droppings Fix for Travis auto-publishing to pursuit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 307f9c0..1552ee9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.* !/.gitignore !/.travis.yml +package-lock.json /bower_components/ /node_modules/ /output/