From 988d5b435390f2391583b09e79304814c35dfd2b Mon Sep 17 00:00:00 2001 From: Evan Borden Date: Sun, 23 Jun 2019 19:31:05 -0500 Subject: [PATCH] Add support for OverloadedLabels `OverloadedLabels` is a simple enough extension to parse and format. It is becoming more common with use of `generic-lens`. Since it can be treated as a `HsVar` its implementation only requires using `docLit`, along with some marshalling for dealing with `FastString`. --- src-literatetests/14-extensions.blt | 10 ++++++++++ .../Haskell/Brittany/Internal/Layouters/Expr.hs | 12 +++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src-literatetests/14-extensions.blt b/src-literatetests/14-extensions.blt index e403568..12facda 100644 --- a/src-literatetests/14-extensions.blt +++ b/src-literatetests/14-extensions.blt @@ -130,3 +130,13 @@ func = do hello |] pure True + +############################################################################### +## OverloadedLabels +#test bare label +{-# LANGUAGE OverloadedLabels #-} +foo = #bar + +#test applied and composed label +{-# LANGUAGE OverloadedLabels #-} +foo = #bar . #baz $ fmap #foo xs diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 74a87af..d08824b 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -55,9 +55,15 @@ layoutExpr lexpr@(L _ expr) = do HsRecFld{} -> do -- TODO briDocByExactInlineOnly "HsRecFld" lexpr - HsOverLabel{} -> do - -- TODO - briDocByExactInlineOnly "HsOverLabel{}" lexpr +#if MIN_VERSION_ghc(8,6,0) /* ghc-8.6 */ + HsOverLabel _ext _reboundFromLabel name -> +#elif MIN_VERSION_ghc(8,2,0) /* ghc-8.2 8.4 */ + HsOverLabel _reboundFromLabel name -> +#else /* ghc-8.0 */ + HsOverLabel name -> +#endif + let label = FastString.unpackFS name + in docLit . Text.pack $ '#' : label HsIPVar{} -> do -- TODO briDocByExactInlineOnly "HsOverLabel{}" lexpr