purebred-mua / purebred-email

A fast email parsing library implemented in Haskell
https://hackage.haskell.org/package/purebred-email
GNU Affero General Public License v3.0
23 stars 4 forks source link

headerContentID is not a valid Lens #76

Open tomjaguarpaw opened 2 years ago

tomjaguarpaw commented 2 years ago

It looks like headerContentID is not a valid Lens, because parse failure maps to Nothing, whilst setting Nothing removes the header in question from the list of headers. Thus set l (view l s) s = s is violated. Perhaps consider making it a Traversal' a ContentID instead?

> import Data.MIME
> import Data.IMF.Syntax
> import Data.String
> let l = headerContentID
> let s = Headers [(mk (fromString "Message-ID"), fromString "! unparseable !")]
> import Control.Lens
> set l (view l s) s
Headers []
> s
Headers [("Message-ID","! unparseable !")]

(Using Message-ID in this example because of https://github.com/purebred-mua/purebred-email/issues/75)

https://github.com/purebred-mua/purebred-email/blob/84ab531ab38d6d499e75260b773dcd979f2e1b95/src/Data/MIME.hs#L922-L926