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 !")]
It looks like
headerContentID
is not a validLens
, because parse failure maps toNothing
, whilst settingNothing
removes the header in question from the list of headers. Thusset l (view l s) s = s
is violated. Perhaps consider making it aTraversal' a ContentID
instead?(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