From 00ad6c71b9e749ba1a2babe9682f5f4f4bd20c50 Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Fri, 28 Jul 2017 18:00:31 +0200 Subject: [PATCH] Impl. layouting of TypeApplication, fixes #38 --- src-literatetests/tests.blt | 5 +++++ .../Haskell/Brittany/Internal/Layouters/Expr.hs | 17 ++++++++++++++--- .../Haskell/Brittany/Internal/Prelude.hs | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src-literatetests/tests.blt b/src-literatetests/tests.blt index 24cfba1..0fc9234 100644 --- a/src-literatetests/tests.blt +++ b/src-literatetests/tests.blt @@ -933,6 +933,11 @@ runBrittany tabSize text = do } parsePrintModule config text +#test issue 38 + +{-# LANGUAGE TypeApplications #-} +foo = bar @Baz + ############################################################################### ############################################################################### diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 4ba947d..6451513 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -167,9 +167,20 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of expDoc1 expDoc2 ] - HsAppType{} -> do - -- TODO - briDocByExactInlineOnly "HsAppType{}" lexpr + HsAppType exp1 (HsWC _ _ ty1) -> do + t <- docSharedWrapper layoutType ty1 + e <- docSharedWrapper layoutExpr exp1 + docAlt + [ docSeq + [ docForceSingleline e + , docSeparator + , docLit $ Text.pack "@" + , docForceSingleline t + ] + , docPar + e + (docSeq [docLit $ Text.pack "@", t ]) + ] HsAppTypeOut{} -> do -- TODO briDocByExactInlineOnly "HsAppTypeOut{}" lexpr diff --git a/src/Language/Haskell/Brittany/Internal/Prelude.hs b/src/Language/Haskell/Brittany/Internal/Prelude.hs index f4f85c0..7aba6a9 100644 --- a/src/Language/Haskell/Brittany/Internal/Prelude.hs +++ b/src/Language/Haskell/Brittany/Internal/Prelude.hs @@ -62,6 +62,7 @@ infixl 4 <&> (.>) :: (a -> b) -> (b -> c) -> (a -> c) f .> g = g . f +infixl 9 .> evaluateDeep :: NFData a => a -> IO a evaluateDeep = evaluate . force