{-# LANGUAGE OverloadedStrings #-} module Main where import Criterion.Main import Text.Html.Email.Validate import Data.Text (Text, pack, unpack) import qualified Data.Text as T main :: IO () main = defaultMain [ bgroup "Valid emails" $ map (\email -> bench (unpack email) $ whnf isValidEmail email) validEmails , bgroup "Invalid emails" $ map (\email -> bench (unpack email) $ whnf isValidEmail email) invalidEmails , bgroup "Long emails" $ map (\email -> bench (unpack $ T.take 15 email) $ whnf isValidEmail email) longEmails ] validEmails :: [Text] validEmails = [ "niceandsimple@example.com" , "very.common@example.com" , "a.little.lengthy.but.fine@dept.example.com" , "disposable.style.email.with+symbol@example.com" , "other.email-with-dash@example.com" , "admin@mailserver1" , "!#$%&'*+-/=?^_`{}|~@example.org" , "john..doe@example.com" ] invalidEmails :: [Text] invalidEmails = [ "\"much.more unusual\"@example.com" , "\"very.unusual.@.unusual.com\"@example.com" , "\"very.(),:;<>[]\\\".VERY.\\\"very@\\\\ \\\"very\\\".unusual\"@strange.example.com" , "\"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a\"@example.org","\" \"@example.org" , "\252\241\238\231\248\240\233@example.com" , "\252\241\238\231\248\240\233@\252\241\238\231\248\240\233.com" , "Abc.example.com" , "A@b@c@example.com","a\"b(c)d,e:f;gi[j\\k]l@example.com" , "just\"not\"right@example.com" , "this is\"not\allowed@example.com" , "this\\ still\\\"not\\\\allowed@example.com" , "john.doe@example..com"] longEmails :: [Text] longEmails = map longEmail [3 .. 20] longEmail :: Int -> Text longEmail n = T.concat ["john.doe@", T.replicate n "longey-"]