git.iko.soy/typeable/validationt
on 97fea97 help sign in
.travis.yml+27−14
since splitsnapshots
unifiedsplit
@@ -4,35 +4,48 @@ language: haskell
4git:
4git:
5 depth: 5
5 depth: 5
6
6
7+cabal: "2.4"
8+
7cache:
9cache:
8 directories:
10 directories:
9 - "$HOME/.cabal/store"
11 - "$HOME/.cabal/store"
10 - "$HOME/.stack"
12 - "$HOME/.stack"
11 - "$TRAVIS_BUILD_DIR/.stack-work"
13 - "$TRAVIS_BUILD_DIR/.stack-work"
12
14
13−jobs:
15+matrix:
14 include:
16 include:
15− - ghc: 8.10.2
17+
16− env: SNAPSHOT="nightly-2020-11-03"
18+ # Cabal
17− - ghc: 8.8.4
18− env: SNAPSHOT="lts-16.20"
19− - ghc: 8.6.5
20− env: SNAPSHOT="lts-14.22"
21 - ghc: 8.4.4
19 - ghc: 8.4.4
22− env: SNAPSHOT="lts-12.26"
20+ - ghc: 8.6.5
21+
22+ # Stack
23+ - ghc: 8.6.5
24+ env: STACK_YAML="$TRAVIS_BUILD_DIR/stack.yaml"
23
25
24install:
26install:
25 - |
27 - |
28+ if [ -z "$STACK_YAML" ]; then
29+ ghc --version
30+ cabal --version
31+ cabal new-update
32+ cabal new-build --enable-tests --enable-benchmarks
33+ else
26− # install stack
34+ # install stack
27− curl -sSL https://get.haskellstack.org/ | sh
35+ curl -sSL https://get.haskellstack.org/ | sh
28
36
29− # build project with stack
37+ # build project with stack
30− stack --version
38+ stack --version
31− stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks --resolver=$SNAPSHOT
39+ stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks
40+ fi
32
41
33script:
42script:
34 - |
43 - |
44+ if [ -z "$STACK_YAML" ]; then
45+ cabal new-test --enable-tests
46+ else
35− stack test --system-ghc
47+ stack test --system-ghc
48+ fi
36
49
37notifications:
50notifications:
38 email: false
51 email: false
ChangeLog.md−6
@@ -1,11 +1,5 @@
1# Revision history for validationt
1# Revision history for validationt
2
2
3−## 0.3.0
4−
5−* Added documentation.
6−* Fixed `textErrors` behaviour.
7−* Dropped `transformers-lift` dependency.
8−
9## 0.2.1.0
3## 0.2.1.0
10
4
11* GHC 8.4 support
5* GHC 8.4 support
README.md+1−2
@@ -2,8 +2,7 @@
2
2
3# ValidationT
3# ValidationT
4
4
5−A simple data validation library. The main idea is to provide an easy way to
5+A very small validation data library.
6−validate web form data by aggregating errors for each field.
7
6
8## Usage
7## Usage
9
8
src/Control/Monad/Validation.hs+5−18
@@ -16,7 +16,6 @@ module Control.Monad.Validation
16 , vWarningL
16 , vWarningL
17 , vZoom
17 , vZoom
18 , vZoomL
18 , vZoomL
19− , vPromote
20 , mmSingleton
19 , mmSingleton
21 , setMempty
20 , setMempty
22 , neConcat
21 , neConcat
@@ -38,14 +37,11 @@ import Data.Foldable as F
38import Data.Functor
37import Data.Functor
39import Data.List as L
38import Data.List as L
40import Data.Map.Strict as M
39import Data.Map.Strict as M
40+import Data.Monoid
41import Data.Text as T
41import Data.Text as T
42import Data.Vector as V
42import Data.Vector as V
43import Test.QuickCheck
43import Test.QuickCheck
44
44
45−#if MIN_VERSION_mtl(2,3,0)
46−import Control.Monad
47−import Control.Monad.Fix
48−#endif
49
45
50-- | Collects all thrown warnings in 'StateT' and errors
46-- | Collects all thrown warnings in 'StateT' and errors
51-- in 'ExceptT' into a single value using 'Monoid'.
47-- in 'ExceptT' into a single value using 'Monoid'.
@@ -89,7 +85,7 @@ instance (Ord k, Semigroup v) => Semigroup (MonoidMap k v) where
89
85
90instance (Ord k, Monoid v) => Monoid (MonoidMap k v) where
86instance (Ord k, Monoid v) => Monoid (MonoidMap k v) where
91 mempty = MonoidMap M.empty
87 mempty = MonoidMap M.empty
92− mappend = (<>)
88+ mappend = mmAppend
93
89
94instance (ToJSON k, ToJSON v) => ToJSON (MonoidMap k v) where
90instance (ToJSON k, ToJSON v) => ToJSON (MonoidMap k v) where
95 toJSON (MonoidMap m) = toJSON $ L.map toObj $ M.toList m
91 toJSON (MonoidMap m) = toJSON $ L.map toObj $ M.toList m
@@ -147,12 +143,12 @@ neConcat f a
147textErrors :: [Text] -> Maybe Text
143textErrors :: [Text] -> Maybe Text
148textErrors = neConcat (\a b -> a <> ", " <> b)
144textErrors = neConcat (\a b -> a <> ", " <> b)
149
145
150−-- | Returns 'mempty' instead of error if no warnings have occurred.
146+-- | Returns 'mempty' instead of error if no warnings have occured.
151-- Returns 'Nothing' as the second element of tuple if computation was
147-- Returns 'Nothing' as the second element of tuple if computation was
152-- interrupted by 'vError'.
148-- interrupted by 'vError'.
153--
149--
154-- Returns all concatenated errors and warnings and the result if no
150-- Returns all concatenated errors and warnings and the result if no
155−-- errors have occurred (warnings could have occurred).
151+-- errors have occured (warnings could have occured).
156--
152--
157-- >>> :{
153-- >>> :{
158-- runValidationT $ do
154-- runValidationT $ do
@@ -178,7 +174,7 @@ runValidationT (ValidationT m) = do
178 Right a -> (warnings, Just a)
174 Right a -> (warnings, Just a)
179
175
180-- | Like 'runValidationT' but doesn't return the result
176-- | Like 'runValidationT' but doesn't return the result
181−-- if any warning has occurred.
177+-- if any warning has occured.
182--
178--
183-- >>> :{
179-- >>> :{
184-- runValidationTEither $ do
180-- runValidationTEither $ do
@@ -289,12 +285,3 @@ vZoomL
289 -> ValidationT a m x
285 -> ValidationT a m x
290 -> ValidationT b m x
286 -> ValidationT b m x
291vZoomL l = vZoom (setMempty l)
287vZoomL l = vZoom (setMempty l)
292−
293−-- | Turn any warnings the have occurred into errors.
294−vPromote
295− :: (Monad m, Monoid a, Eq a)
296− => ValidationT a m x
297− -> ValidationT a m x
298−vPromote m = do
299− err <- lift $ runValidationTEither m
300− either vError return err
stack.yaml+1−1
@@ -15,7 +15,7 @@
15# resolver:
15# resolver:
16# name: custom-snapshot
16# name: custom-snapshot
17# location: "./custom-snapshot.yaml"
17# location: "./custom-snapshot.yaml"
18−resolver: lts-22.4
18+resolver: lts-14.21
19
19
20# User packages to be built.
20# User packages to be built.
21# Various formats can be used as shown in the example below.
21# Various formats can be used as shown in the example below.
test/Doc.hs+1−1
@@ -3,4 +3,4 @@ module Main (main) where
3import Test.DocTest
3import Test.DocTest
4
4
5main :: IO ()
5main :: IO ()
6−main = doctest [ "-XOverloadedStrings", "-isrc", "src" ]
6+main = doctest [ "-XOverloadedStrings", "src" ]
validationt.cabal+22−18
@@ -2,11 +2,9 @@
2-- documentation, see http://haskell.org/cabal/users-guide/
2-- documentation, see http://haskell.org/cabal/users-guide/
3
3
4name: validationt
4name: validationt
5−version: 0.3.0
5+version: 0.2.1.0
6−synopsis: Straightforward validation monad
6+synopsis: Straightforward validation monad.
7−description:
7+description: Convenient solution for validating web forms and APIs.
8− A simple data validation library. The main idea is to provide an easy way to validate web form data by aggregating errors for each field.
9− .
10homepage: https://github.com/typeable/validationt
8homepage: https://github.com/typeable/validationt
11license: BSD3
9license: BSD3
12license-file: LICENSE
10license-file: LICENSE
@@ -16,12 +14,9 @@ maintainer: makeit@typeable.io
16category: Control
14category: Control
17build-type: Simple
15build-type: Simple
18extra-source-files: ChangeLog.md
16extra-source-files: ChangeLog.md
19− , README.md
20cabal-version: >=1.10
17cabal-version: >=1.10
21tested-with: GHC == 8.4.4
18tested-with: GHC == 8.4.4
22 , GHC == 8.6.5
19 , GHC == 8.6.5
23− , GHC == 8.8.4
24− , GHC == 8.10.2
25
20
26source-repository head
21source-repository head
27 type: git
22 type: git
@@ -29,14 +24,14 @@ source-repository head
29
24
30library
25library
31 exposed-modules: Control.Monad.Validation
26 exposed-modules: Control.Monad.Validation
32− build-depends: base >=4.10 && < 5
27+ build-depends: base >=4.8 && < 5
33− , aeson >=1.0
28+ , aeson >= 1.0
34 , containers
29 , containers
35− , exceptions >=0.9
30+ , exceptions
36 , lens
31 , lens
37 , monad-control
32 , monad-control
38− , mtl <2.3 || >2.3
33+ , mtl
39− , QuickCheck >=2.8.2
34+ , QuickCheck
40 , text
35 , text
41 , transformers
36 , transformers
42 , transformers-base
37 , transformers-base
@@ -55,12 +50,21 @@ library
55 -Wmissing-export-lists
50 -Wmissing-export-lists
56
51
57test-suite doctest
52test-suite doctest
58− default-language: Haskell2010
59 type: exitcode-stdio-1.0
53 type: exitcode-stdio-1.0
60 hs-source-dirs: test
54 hs-source-dirs: test
61 ghc-options: -Wall
55 ghc-options: -Wall
62 main-is: Doc.hs
56 main-is: Doc.hs
63− build-depends:
57+ build-depends: base >=4.8 && < 5
64− base >= 4.10.0.0
58+ , aeson >= 1.0
65− , doctest >= 0.11.4
59+ , doctest
66− , validationt
60+ , containers
61+ , exceptions
62+ , lens
63+ , monad-control
64+ , mtl
65+ , QuickCheck
66+ , text
67+ , transformers
68+ , transformers-base
69+ , vector
70+ , doctest