Haskell field-level signup validation errors
Haskell
import Data.Char (isAlphaNum, isUpper)
data Signup = Signup { username :: String, email :: String, password :: String }
validateSignup :: Signup -> [String]
validateSignup s = concat
[ field "username" (length (username s) >= 3 && length (username s) <= 20 && all isAlphaNum (username s))
"must be 3-20 alphanumeric characters"
, field "email" ('@' `elem` email s && '.' `elem` email s) "must contain @ and a dot"
, field "password" (length (password s) >= 8 && any isUpper (password s)) "needs 8+ chars and an uppercase letter"
]
where
field name ok msg = [name ++ ": " ++ msg | not ok]