<p dir="ltr">Hello Bertram,</p>
<p dir="ltr">This is a good idea. </p>
<p dir="ltr">I also considered this but to provide a proper compatibility layer it is necessary to "bundle" pattern synonyms with suitable type constructors so that when users import the type constructor then they also import the suitable pattern synonyms. </p>
<p dir="ltr">This feature was only implemented in GHC 8.0. It is currently not much effort to maintain HSE to support back to at least GHC 7.4 so it didn't seem worth sacrificing this. </p>
<p dir="ltr">It would be good to provide this shim in future versions of the library but at the moment the feature isn't mature enough. Message me when you release this to Hackage and I will add a link to the README. </p>
<p dir="ltr">Matt</p>
<p dir="ltr">On Sat, Jul 30, 2016 at 11:22 PM, Bertram Felgenhauer via Haskell-Cafe <<a href="mailto:haskell-cafe@haskell.org">haskell-cafe@haskell.org</a>> wrote:<br>
> Dear all,<br>
><br>
> the latest major release of haskell-src-exts (version 1.18) removed<br>
> the annotation free variant of the Haskell AST. It occurred to me that<br>
> using ghc's pattern synonyms it is possible to offer a light-weight<br>
> simplified view on the annotated AST. For example,<br>
> Language.Haskell.Exts.Syntax defines<br>
><br>
> data Name l = Ident l String | Symbol l String<br>
><br>
> and we can provide a simplified view with all annotations equal to ()<br>
> by doing<br>
><br>
> {-# LANGUAGE PatternSynonyms #-}<br>
> import qualified Language.Haskell.Exts.Syntax as H<br>
><br>
> type Name = H.Name ()<br>
> pattern Ident a = H.Ident () a<br>
> pattern Symbol a = H.Symbol () a<br>
><br>
> Because the type isn't changed, no code has to be reimplemented to<br>
> work with this AST.<br>
><br>
> A first rough cut at an implementation can be found on github [1].<br>
> Before releasing it on hackage (which requires some more polishing)<br>
> I'd appreciate feedback on the approach. Would you consider using<br>
> such a package? Is there a better approach? Also any thoughts on<br>
> usability (e.g., how to approach documentation) would be welcome.<br>
><br>
> Cheers, Bertram<br>
><br>
> [1] <a href="https://github.com/int-e/haskell-src-exts-simple">https://github.com/int-e/haskell-src-exts-simple</a><br>
><br>
><br>
> P.S. This grew out of an effort to update lambdabot to HSE-1.18,<br>
> which made me feel awful about all the superfluous and ugly () in<br>
> the resulting code. I also have some numbers showing that the<br>
> annotation-free view makes updating the code smoother:<br>
><br>
> Using the annotation-free view, the update touches 75 lines:<br>
> src/Lambdabot/Plugin/Haskell/Eval.hs | 18 +-<br>
> src/Lambdabot/Plugin/Haskell/Pointful.hs | 201 +++++++++++++++----------------<br>
> src/Lambdabot/Plugin/Haskell/Pretty.hs | 14 +-<br>
> src/Lambdabot/Plugin/Haskell/UnMtl.hs | 62 ++++-----<br>
> src/Lambdabot/Plugin/Haskell/Undo.hs | 115 ++++++++---------<br>
> 5 files changed, 72 insertions(+), 75 deletions(-)<br>
><br>
> Using the haskell-src-exts 1.18 AST, the update touches 208 lines:<br>
> src/Lambdabot/Plugin/Haskell/Pointful.hs | 87 ++++++++++++++-----------------<br>
> src/Lambdabot/Plugin/Haskell/Pretty.hs | 12 ++--<br>
> src/Lambdabot/Plugin/Haskell/UnMtl.hs | 10 +--<br>
> src/Lambdabot/Plugin/Haskell/Undo.hs | 34 ++++++------<br>
> 5 files changed, 204 insertions(+), 206 deletions(-)<br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> To (un)subscribe, modify options or view archives go to:<br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
> Only members subscribed via the mailman list are allowed to post.</p>