email-validate-hs icon indicating copy to clipboard operation
email-validate-hs copied to clipboard

Major version changes (v3)

Open Porges opened this issue 7 years ago • 4 comments

Ideas for v3:

  • [x] Input type should be Text, not ByteString (see #9)
  • [x] Test suite will be inherited from Dominic Sayer's isemail, and won't be inlined in the code.
  • [x] The basic EmailAddress should not provide individual access to localPart/domainPart, but instead be a newtype around Text. This will facilitate loading/storing from unvalidated stores in a simpler fashion than is currently possible (e.g. at the moment you can use unsafeEmailAddress but it takes the two parts separately, not a single email address string).
  • [x] Lift ParseOptions to type level, per this comment.
  • [x] The default parsing mode will change to something saner that excludes "obsolete" syntaxes (these can be accessed using the "Detailed" module).
  • [ ] Support internationalized emails.
    • [x] In local parts
      • [ ] Add tests for each bit (atext, ctext, etc – ignore dtext since we'll do proper handling)
    • [ ] In domains (this probably requires an IDNA2008 implementation)
  • [ ] For those who want full analysis, there will be a separate "Detailed" module which can break apart an email address. (Or, just provide functions to break down the EmailAddress type...)
  • [ ] Error messages should be improved, and this checked by tests.
  • [ ] Consider exposing an FFI interface for other languages to use.
  • [ ] Consider improved equality (see #36) this should fall out of better domain parsing
  • [ ] Consider switching to Megaparsec, for better error messages?
  • [ ] Consider which instances to upstream from https://github.com/cdepillabout/emailaddress (as pointed out by @bitemyapp)
    • [x] NFData (per #25)
    • [x] Binary (per #25)
    • [ ] PathPiece (per #20)
    • [ ] Aeson instances (from emailaddress)

Porges avatar Jun 29 '17 07:06 Porges

8c6e0c7d906 adds the isemail test-suite.

Another thing to think about: I should be testing the canonicalized versions of email addresses to ensure the normal form is as expected. (The isemail suite does not do this.)

Porges avatar Jun 30 '17 07:06 Porges

Idea: use DataKinds for the options type that controls what to allow in the email address.

This way we have type EmailAddress = EmailAddress' SaneParseOptions and you can't accidentally mix email addresses parsed with different levels of flexibility.

Also: add a RestrictedEmailAddress for "Emails as they supported by most major providers".

Edit: didn't use DataKinds because that forces it onto the consumer. Instead we have a typeclass ParseOptions which supplies the configuration. This provides the extra safety without any extra burden on consumers.

Porges avatar Jul 05 '17 00:07 Porges

@Porges Don't you know my IPv6Addr package? It should give all you need about IPv6 addresses. If not, feel free to contact me.

MichelBoucey avatar Jul 12 '17 14:07 MichelBoucey

@MichelBoucey I didn't come across it when I was looking. It looks like it could be useful. I'll stick with ip for now until I get everything working and then have a better look.

One thing that might be required is: in order to pass the test-suite, in some situations I have to be able to parse IPv4-only addresses and not accept IPv6 ones. I'm not sure if this is possible with your current API (except if I parse and then check the result to see if it is IPv4-compatible).

Porges avatar Jul 13 '17 05:07 Porges