validate-input: Input validation combinator library

[ library, mit, web ] [ Propose Tags ]

A small Haskell combinator library that provides a simple way of validating user provided data structures.


[Skip to Readme]
Versions 0.1.0.0, 0.2.0.0, 0.3.0.0, 0.4.0.0
Dependencies base (>=4.6 && <5), bytestring (>=0.10), either (>=4.3 && <5), mtl (>=2.1), pcre-heavy (>=1.0), semigroups (>=0.16), string-conversions (>=0.4), text (>=1.2) [details]
License MIT
Copyright (c) 2015 Alexander Thiemann
Author Alexander Thiemann <mail@athiemann.net>
Maintainer Alexander Thiemann <mail@athiemann.net>
Revised Revision 1 made by phadej at Tue Sep 25 20:23:56 UTC 2018
Category Web
Home page https://github.com/agrafix/validate-input
Bug tracker https://github.com/agrafix/validate-input/issues
Source repo head: git clone https://github.com/agrafix/validate-input
Uploaded by AlexanderThiemann at Wed Nov 4 18:25:40 UTC 2015
Distributions NixOS:0.4.0.0
Downloads 1256 total (43 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-11-04 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for validate-input-0.4.0.0

[back to package description]

validate-input

Build Status Hackage

Intro

Hackage: validate-input Stackage: validate-input

Input validation combinator library

Library Usage Example

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
import Data.Validator
import qualified Data.Text as T

data Example
   = Example
   { ex_username :: T.Text
   , ex_dogs :: Int
   , ex_friendName :: Maybe T.Text
   } deriving (Show)

data ExampleChecked
   = ExampleChecked
   { exc_username :: T.Text
   , exc_dogs :: Int
   , exc_friendName :: T.Text
   } deriving (Show)

main :: IO ()
main =
    do putStrLn "Check results:"
       print example

checkUsername :: Monad m => ValidationRuleT String m T.Text
checkUsername =
    lengthBetween 3 12 "Should between 3 and 12 chars"
    >=> matchesRegex [re|^[A-za-z0-9]+$|] "only alpha num"

checkNumber :: Monad m => ValidationRuleT String m Int
checkNumber =
    smallerThan 5 "No more than 5 dogs allowed"

checkExample :: Monad m => TransValidationRuleT String m Example ExampleChecked
checkExample e =
    ExampleChecked
    <$> checkUsername (ex_username e)
    <*> checkNumber (ex_dogs e)
    <*> requiredValue "You must provide a friend name!" (ex_friendName e)

example :: Either String ExampleChecked
example =
    runValidator checkExample $
    Example
    { ex_username = "alex"
    , ex_dogs = 23
    , ex_friendName = Nothing
    }

Install

  • Using cabal: cabal install validate-input
  • Using Stack: stack install validate-input
  • From Source (cabal): git clone https://github.com/agrafix/validate-input.git && cd validate-input && cabal install
  • From Source (stack): git clone https://github.com/agrafix/validate-input.git && cd validate-input && stack build

Misc

Supported GHC Versions

  • 7.8.4
  • 7.10.2

License

Released under the MIT license. (c) 2015 Alexander Thiemann