RFC: revisiting the simplified haskell-src-exts AST

Dear all, the latest major release of haskell-src-exts (version 1.18) removed the annotation free variant of the Haskell AST. It occurred to me that using ghc's pattern synonyms it is possible to offer a light-weight simplified view on the annotated AST. For example, Language.Haskell.Exts.Syntax defines data Name l = Ident l String | Symbol l String and we can provide a simplified view with all annotations equal to () by doing {-# LANGUAGE PatternSynonyms #-} import qualified Language.Haskell.Exts.Syntax as H type Name = H.Name () pattern Ident a = H.Ident () a pattern Symbol a = H.Symbol () a Because the type isn't changed, no code has to be reimplemented to work with this AST. A first rough cut at an implementation can be found on github [1]. Before releasing it on hackage (which requires some more polishing) I'd appreciate feedback on the approach. Would you consider using such a package? Is there a better approach? Also any thoughts on usability (e.g., how to approach documentation) would be welcome. Cheers, Bertram [1] https://github.com/int-e/haskell-src-exts-simple P.S. This grew out of an effort to update lambdabot to HSE-1.18, which made me feel awful about all the superfluous and ugly () in the resulting code. I also have some numbers showing that the annotation-free view makes updating the code smoother: Using the annotation-free view, the update touches 75 lines: src/Lambdabot/Plugin/Haskell/Eval.hs | 18 +- src/Lambdabot/Plugin/Haskell/Pointful.hs | 201 +++++++++++++++---------------- src/Lambdabot/Plugin/Haskell/Pretty.hs | 14 +- src/Lambdabot/Plugin/Haskell/UnMtl.hs | 62 ++++----- src/Lambdabot/Plugin/Haskell/Undo.hs | 115 ++++++++--------- 5 files changed, 72 insertions(+), 75 deletions(-) Using the haskell-src-exts 1.18 AST, the update touches 208 lines: src/Lambdabot/Plugin/Haskell/Pointful.hs | 87 ++++++++++++++----------------- src/Lambdabot/Plugin/Haskell/Pretty.hs | 12 ++-- src/Lambdabot/Plugin/Haskell/UnMtl.hs | 10 +-- src/Lambdabot/Plugin/Haskell/Undo.hs | 34 ++++++------ 5 files changed, 204 insertions(+), 206 deletions(-)
participants (1)
-
Bertram Felgenhauer