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]