/a/ => char 'a'
/abcd/ => string "abcd"
sequence [ char 'a', char 'b', char 'c', char 'd' ]
(:) <$> char 'a' <*> string "bcd"
(++) <$> string "ab" <*> string "cd"
/[abcd]/ => oneOf "abcd"
/[^abcd]/ => noneOf "abcd"
/[a-z]/ => oneOf ['a'..'z']
/[^a-z]/ => noneOf ['a'..'z']
/a*/ => many (char 'a')
/a+/ => many1 (char 'a')
/a?/ => optionMaybe (char 'a')
/(abcd)*/ => many (try $ string "abcd")
/(abcd)+/ => many1 (try $ string "abcd")
/(abcd)?/ => optionMaybe (try $ string "abcd")
/a|b/ => char 'a' <|> char 'b'
/$/ => eof
/(?=abcd)/ => lookAhead (try $ string "abcd")
/(?!abcd)/ => notFollowedBy (string "abcd")
source https://www.reddit.com/r/haskell/comments/421how/regex_library_for_custom_containers/cz7sti0