From 9d7cecaa920df8e10f1b79fcb480cdb54faa8247 Mon Sep 17 00:00:00 2001 From: Sergey Vinokurov Date: Wed, 4 Apr 2018 09:26:59 +0100 Subject: [PATCH 1/6] Run tests in prallel --- brittany.cabal | 3 ++- src-literatetests/Main.hs | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/brittany.cabal b/brittany.cabal index 332ca76..4d43fcc 100644 --- a/brittany.cabal +++ b/brittany.cabal @@ -335,8 +335,9 @@ test-suite littests ghc-options: { -Wall -fno-warn-unused-imports + -threaded -rtsopts - -with-rtsopts "-M2G" + -with-rtsopts "-M2G -N" } test-suite libinterfacetests diff --git a/src-literatetests/Main.hs b/src-literatetests/Main.hs index 8f492d1..1196a56 100644 --- a/src-literatetests/Main.hs +++ b/src-literatetests/Main.hs @@ -1,12 +1,13 @@ {-# LANGUAGE QuasiQuotes #-} -module Main where +module Main (main) where #include "prelude.inc" import Test.Hspec +import Test.Hspec.Runner ( hspecWith, defaultConfig, configConcurrentJobs ) import NeatInterpolation @@ -22,6 +23,7 @@ import Language.Haskell.Brittany.Internal.Config.Types import Language.Haskell.Brittany.Internal.Config import Data.Coerce ( coerce ) +import GHC.Conc ( getNumCapabilities ) import qualified Data.Text.IO as Text.IO import System.FilePath ( () ) @@ -48,7 +50,8 @@ main = do let groups = createChunks =<< inputs inputCtxFree <- Text.IO.readFile "src-literatetests/30-tests-context-free.blt" let groupsCtxFree = createChunks inputCtxFree - hspec $ do + jobs <- getNumCapabilities + hspecWith (defaultConfig { configConcurrentJobs = Just jobs }) $ do groups `forM_` \(groupname, tests) -> do describe (Text.unpack groupname) $ tests `forM_` \(name, pend, inp) -> do (if pend then before_ pending else id) -- 2.30.2 From 281d7a2f81698b265ce7ff8d559af2eeea8df484 Mon Sep 17 00:00:00 2001 From: Sergey Vinokurov Date: Tue, 18 Sep 2018 00:25:18 +0100 Subject: [PATCH 2/6] Lay out unboxed tuples with spaces This avoids clashes with names like foo# --- src-literatetests/15-regressions.blt | 10 +++++++ .../Brittany/Internal/Layouters/Expr.hs | 7 +++-- .../Brittany/Internal/Layouters/Pattern.hs | 30 +++++++++++-------- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt index 080c15e..cb4ac5d 100644 --- a/src-literatetests/15-regressions.blt +++ b/src-literatetests/15-regressions.blt @@ -650,3 +650,13 @@ jaicyhHumzo btrKpeyiFej mava = do ) Xcde{} -> (s, Pioemav) pure imomue + +#test unboxed-tuple and vanilla names +{-# LANGUAGE UnboxedTuples #-} +spanKey = case foo of + (# bar, baz #) -> (# baz, bar #) + +#test unboxed-tuple and hashed name +{-# LANGUAGE MagicHash, UnboxedTuples #-} +spanKey = case foo of + (# bar#, baz# #) -> (# baz# +# bar#, bar# #) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 92bcceb..96b739c 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -371,8 +371,11 @@ layoutExpr lexpr@(L _ expr) = do $ \(arg, exprM) -> docWrapNode arg $ maybe docEmpty layoutExpr exprM hasComments <- hasAnyCommentsBelow lexpr let (openLit, closeLit) = case boxity of - Boxed -> (docLit $ Text.pack "(", docLit $ Text.pack ")") - Unboxed -> (docLit $ Text.pack "(#", docLit $ Text.pack "#)") + Boxed -> (docLit $ Text.pack "(", docLit $ Text.pack ")") + Unboxed -> + ( docSeq [docLit $ Text.pack "(#", docSeparator] + , docSeq [docSeparator, docLit $ Text.pack "#)"] + ) case splitFirstLast argDocs of FirstLastEmpty -> docSeq [ openLit diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs index c65b357..6c95e0b 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs @@ -140,8 +140,8 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of -- (nestedpat1, nestedpat2, nestedpat3) -> expr -- (#nestedpat1, nestedpat2, nestedpat3#) -> expr case boxity of - Boxed -> wrapPatListy args "(" ")" - Unboxed -> wrapPatListy args "(#" "#)" + Boxed -> wrapPatListy args "(" ")" False + Unboxed -> wrapPatListy args "(#" "#)" True AsPat asName asPat -> do -- bind@nestedpat -> expr wrapPatPrepend asPat (docLit $ lrdrNameToText asName <> Text.pack "@") @@ -172,7 +172,7 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of ListPat elems _ _ -> -- [] -> expr1 -- [nestedpat1, nestedpat2, nestedpat3] -> expr2 - wrapPatListy elems "[" "]" + wrapPatListy elems "[" "]" False BangPat pat1 -> do -- !nestedpat -> expr wrapPatPrepend pat1 (docLit $ Text.pack "!") @@ -213,17 +213,23 @@ wrapPatListy :: [Located (Pat GhcPs)] -> String -> String + -> Bool -> ToBriDocM (Seq BriDocNumbered) -wrapPatListy elems start end = do +wrapPatListy elems start end padSeparators = do elemDocs <- Seq.fromList elems `forM` (layoutPat >=> colsWrapPat) - sDoc <- docLit $ Text.pack start - eDoc <- docLit $ Text.pack end case Seq.viewl elemDocs of Seq.EmptyL -> fmap Seq.singleton $ docLit $ Text.pack $ start ++ end x1 Seq.:< rest -> do - rest' <- rest `forM` \bd -> docSeq - [ docLit $ Text.pack "," - , docSeparator - , return bd - ] - return $ (sDoc Seq.<| x1 Seq.<| rest') Seq.|> eDoc + sDoc <- docLit $ Text.pack start + eDoc <- docLit $ Text.pack end + let sDoc' | padSeparators = docSeq [return sDoc, docSeparator] + | otherwise = return sDoc + eDoc' | padSeparators = docSeq [docSeparator, return eDoc] + | otherwise = return eDoc + sDoc'' <- sDoc' + eDoc'' <- eDoc' + rest' <- rest `forM` \bd -> docSeq + [ docCommaSep + , return bd + ] + return $ (sDoc'' Seq.<| x1 Seq.<| rest') Seq.|> eDoc'' -- 2.30.2 From 6898d3ef4459f9aed62556cf3eb76082a32c9869 Mon Sep 17 00:00:00 2001 From: Sergey Vinokurov Date: Tue, 18 Sep 2018 09:03:28 +0100 Subject: [PATCH 3/6] Lay out unboxed tuples in types --- src-literatetests/15-regressions.blt | 1 + .../Haskell/Brittany/Internal/Layouters/Type.hs | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt index cb4ac5d..52306c1 100644 --- a/src-literatetests/15-regressions.blt +++ b/src-literatetests/15-regressions.blt @@ -658,5 +658,6 @@ spanKey = case foo of #test unboxed-tuple and hashed name {-# LANGUAGE MagicHash, UnboxedTuples #-} +spanKey :: _ -> (# Int#, Int# #) spanKey = case foo of (# bar#, baz# #) -> (# baz# +# bar#, bar# #) diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs index dfde7f5..2a8f0dd 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs @@ -234,7 +234,7 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of list = List.tail cntxtDocs <&> \cntxtDoc -> docCols ColTyOpPrefix [ docCommaSep - , docAddBaseY (BrIndentSpecial 2) + , docAddBaseY (BrIndentSpecial 2) $ cntxtDoc ] in docPar open $ docLines $ list ++ [close] @@ -407,17 +407,18 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of ] unboxedL = do docs <- docSharedWrapper layoutType `mapM` typs + let start = docSeq [docLit $ Text.pack "(#", docSeparator] + end = docSeq [docSeparator, docLit $ Text.pack "#)"] docAlt - [ docSeq $ [docLit $ Text.pack "(#"] + [ docSeq $ [start] ++ List.intersperse docCommaSep docs - ++ [docLit $ Text.pack "#)"] + ++ [end] , let - start = docCols ColTyOpPrefix [docLit $ Text.pack "(#", head docs] - lines = List.tail docs <&> \d -> - docCols ColTyOpPrefix [docCommaSep, d] - end = docLit $ Text.pack "#)" + start' = docCols ColTyOpPrefix [start, head docs] + lines = List.tail docs <&> \d -> + docCols ColTyOpPrefix [docCommaSep, d] in docPar - (docAddBaseY (BrIndentSpecial 2) start) + (docAddBaseY (BrIndentSpecial 2) start') (docLines $ (docAddBaseY (BrIndentSpecial 2) <$> lines) ++ [end]) ] HsOpTy{} -> -- TODO -- 2.30.2 From 9755db1d05ba30f95ea2d21d6be70006da1e1371 Mon Sep 17 00:00:00 2001 From: Sergey Vinokurov Date: Tue, 18 Sep 2018 09:12:35 +0100 Subject: [PATCH 4/6] Unify "(#", "#)" under single name, docParenHashL and docParenHashR --- src-literatetests/15-regressions.blt | 3 ++- .../Brittany/Internal/LayouterBasics.hs | 23 +++++++++++++++- .../Brittany/Internal/Layouters/Expr.hs | 5 +--- .../Brittany/Internal/Layouters/Pattern.hs | 26 +++++++------------ .../Brittany/Internal/Layouters/Type.hs | 4 +-- 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt index 52306c1..e7bf199 100644 --- a/src-literatetests/15-regressions.blt +++ b/src-literatetests/15-regressions.blt @@ -653,11 +653,12 @@ jaicyhHumzo btrKpeyiFej mava = do #test unboxed-tuple and vanilla names {-# LANGUAGE UnboxedTuples #-} +spanKey :: (# Int, Int #) -> (# Int, Int #) spanKey = case foo of (# bar, baz #) -> (# baz, bar #) #test unboxed-tuple and hashed name {-# LANGUAGE MagicHash, UnboxedTuples #-} -spanKey :: _ -> (# Int#, Int# #) +spanKey :: (# Int#, Int# #) -> (# Int#, Int# #) spanKey = case foo of (# bar#, baz# #) -> (# baz# +# bar#, bar# #) diff --git a/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs b/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs index d5aac63..c6cd9ae 100644 --- a/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs +++ b/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs @@ -50,7 +50,12 @@ module Language.Haskell.Brittany.Internal.LayouterBasics , appSep , docCommaSep , docParenLSep + , docParenL , docParenR + , docParenHashL + , docParenHashR + , docBracketL + , docBracketR , docTick , spacifyDocs , briDocMToPPM @@ -530,11 +535,27 @@ docCommaSep :: ToBriDocM BriDocNumbered docCommaSep = appSep $ docLit $ Text.pack "," docParenLSep :: ToBriDocM BriDocNumbered -docParenLSep = appSep $ docLit $ Text.pack "(" +docParenLSep = appSep docParenL + +docParenL :: ToBriDocM BriDocNumbered +docParenL = docLit $ Text.pack "(" docParenR :: ToBriDocM BriDocNumbered docParenR = docLit $ Text.pack ")" +docParenHashL :: ToBriDocM BriDocNumbered +docParenHashL = docSeq [docLit $ Text.pack "(#", docSeparator] + +docParenHashR :: ToBriDocM BriDocNumbered +docParenHashR = docSeq [docSeparator, docLit $ Text.pack "#)"] + +docBracketL :: ToBriDocM BriDocNumbered +docBracketL = docLit $ Text.pack "[" + +docBracketR :: ToBriDocM BriDocNumbered +docBracketR = docLit $ Text.pack "]" + + docTick :: ToBriDocM BriDocNumbered docTick = docLit $ Text.pack "'" diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index 96b739c..a486d3b 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -372,10 +372,7 @@ layoutExpr lexpr@(L _ expr) = do hasComments <- hasAnyCommentsBelow lexpr let (openLit, closeLit) = case boxity of Boxed -> (docLit $ Text.pack "(", docLit $ Text.pack ")") - Unboxed -> - ( docSeq [docLit $ Text.pack "(#", docSeparator] - , docSeq [docSeparator, docLit $ Text.pack "#)"] - ) + Unboxed -> (docParenHashL, docParenHashR) case splitFirstLast argDocs of FirstLastEmpty -> docSeq [ openLit diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs index 6c95e0b..6b8e750 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs @@ -140,8 +140,8 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of -- (nestedpat1, nestedpat2, nestedpat3) -> expr -- (#nestedpat1, nestedpat2, nestedpat3#) -> expr case boxity of - Boxed -> wrapPatListy args "(" ")" False - Unboxed -> wrapPatListy args "(#" "#)" True + Boxed -> wrapPatListy args "()" docParenL docParenR + Unboxed -> wrapPatListy args "(##)" docParenHashL docParenHashR AsPat asName asPat -> do -- bind@nestedpat -> expr wrapPatPrepend asPat (docLit $ lrdrNameToText asName <> Text.pack "@") @@ -172,7 +172,7 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of ListPat elems _ _ -> -- [] -> expr1 -- [nestedpat1, nestedpat2, nestedpat3] -> expr2 - wrapPatListy elems "[" "]" False + wrapPatListy elems "[]" docBracketL docBracketR BangPat pat1 -> do -- !nestedpat -> expr wrapPatPrepend pat1 (docLit $ Text.pack "!") @@ -212,24 +212,18 @@ wrapPatPrepend pat prepElem = do wrapPatListy :: [Located (Pat GhcPs)] -> String - -> String - -> Bool + -> ToBriDocM BriDocNumbered + -> ToBriDocM BriDocNumbered -> ToBriDocM (Seq BriDocNumbered) -wrapPatListy elems start end padSeparators = do +wrapPatListy elems both start end = do elemDocs <- Seq.fromList elems `forM` (layoutPat >=> colsWrapPat) case Seq.viewl elemDocs of - Seq.EmptyL -> fmap Seq.singleton $ docLit $ Text.pack $ start ++ end + Seq.EmptyL -> fmap Seq.singleton $ docLit $ Text.pack both x1 Seq.:< rest -> do - sDoc <- docLit $ Text.pack start - eDoc <- docLit $ Text.pack end - let sDoc' | padSeparators = docSeq [return sDoc, docSeparator] - | otherwise = return sDoc - eDoc' | padSeparators = docSeq [docSeparator, return eDoc] - | otherwise = return eDoc - sDoc'' <- sDoc' - eDoc'' <- eDoc' + sDoc <- start + eDoc <- end rest' <- rest `forM` \bd -> docSeq [ docCommaSep , return bd ] - return $ (sDoc'' Seq.<| x1 Seq.<| rest') Seq.|> eDoc'' + return $ (sDoc Seq.<| x1 Seq.<| rest') Seq.|> eDoc diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs index 2a8f0dd..d50a10c 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs @@ -407,8 +407,8 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of ] unboxedL = do docs <- docSharedWrapper layoutType `mapM` typs - let start = docSeq [docLit $ Text.pack "(#", docSeparator] - end = docSeq [docSeparator, docLit $ Text.pack "#)"] + let start = docParenHashL + end = docParenHashR docAlt [ docSeq $ [start] ++ List.intersperse docCommaSep docs -- 2.30.2 From 71efa549540ee085b7abe49a73b5dd95b97b3a4e Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Sun, 23 Sep 2018 23:09:50 +0200 Subject: [PATCH 5/6] Move tests, minor Refactoring, Add comments --- src-literatetests/14-extensions.blt | 14 +++++++++++ src-literatetests/15-regressions.blt | 12 --------- .../Brittany/Internal/LayouterBasics.hs | 18 ++++++++----- .../Brittany/Internal/Layouters/Expr.hs | 2 +- .../Brittany/Internal/Layouters/Pattern.hs | 2 +- .../Brittany/Internal/Layouters/Type.hs | 25 +++++++++---------- 6 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src-literatetests/14-extensions.blt b/src-literatetests/14-extensions.blt index 0e71918..9dc0378 100644 --- a/src-literatetests/14-extensions.blt +++ b/src-literatetests/14-extensions.blt @@ -81,3 +81,17 @@ import Test ( type (++) , pattern Foo , pattern (:.) ) + +############################################################################### +## UnboxedTuples + MagicHash +#test unboxed-tuple and vanilla names +{-# LANGUAGE UnboxedTuples #-} +spanKey :: (# Int, Int #) -> (# Int, Int #) +spanKey = case foo of + (# bar, baz #) -> (# baz, bar #) + +#test unboxed-tuple and hashed name +{-# LANGUAGE MagicHash, UnboxedTuples #-} +spanKey :: (# Int#, Int# #) -> (# Int#, Int# #) +spanKey = case foo of + (# bar#, baz# #) -> (# baz# +# bar#, bar# #) diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt index e7bf199..080c15e 100644 --- a/src-literatetests/15-regressions.blt +++ b/src-literatetests/15-regressions.blt @@ -650,15 +650,3 @@ jaicyhHumzo btrKpeyiFej mava = do ) Xcde{} -> (s, Pioemav) pure imomue - -#test unboxed-tuple and vanilla names -{-# LANGUAGE UnboxedTuples #-} -spanKey :: (# Int, Int #) -> (# Int, Int #) -spanKey = case foo of - (# bar, baz #) -> (# baz, bar #) - -#test unboxed-tuple and hashed name -{-# LANGUAGE MagicHash, UnboxedTuples #-} -spanKey :: (# Int#, Int# #) -> (# Int#, Int# #) -spanKey = case foo of - (# bar#, baz# #) -> (# baz# +# bar#, bar# #) diff --git a/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs b/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs index c6cd9ae..a431855 100644 --- a/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs +++ b/src/Language/Haskell/Brittany/Internal/LayouterBasics.hs @@ -52,8 +52,8 @@ module Language.Haskell.Brittany.Internal.LayouterBasics , docParenLSep , docParenL , docParenR - , docParenHashL - , docParenHashR + , docParenHashLSep + , docParenHashRSep , docBracketL , docBracketR , docTick @@ -537,17 +537,23 @@ docCommaSep = appSep $ docLit $ Text.pack "," docParenLSep :: ToBriDocM BriDocNumbered docParenLSep = appSep docParenL +-- TODO: we don't make consistent use of these (yet). However, I think the +-- most readable approach overall might be something else: define +-- `lit = docLit . Text.pack` and `prepSep = docSeq [docSeparator, x]`. +-- I think those two would make the usage most readable. +-- lit "(" and appSep (lit "(") are understandable and short without +-- introducing a new top-level binding for all types of parentheses. docParenL :: ToBriDocM BriDocNumbered docParenL = docLit $ Text.pack "(" docParenR :: ToBriDocM BriDocNumbered docParenR = docLit $ Text.pack ")" -docParenHashL :: ToBriDocM BriDocNumbered -docParenHashL = docSeq [docLit $ Text.pack "(#", docSeparator] +docParenHashLSep :: ToBriDocM BriDocNumbered +docParenHashLSep = docSeq [docLit $ Text.pack "(#", docSeparator] -docParenHashR :: ToBriDocM BriDocNumbered -docParenHashR = docSeq [docSeparator, docLit $ Text.pack "#)"] +docParenHashRSep :: ToBriDocM BriDocNumbered +docParenHashRSep = docSeq [docSeparator, docLit $ Text.pack "#)"] docBracketL :: ToBriDocM BriDocNumbered docBracketL = docLit $ Text.pack "[" diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs index a486d3b..1da80ae 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs @@ -372,7 +372,7 @@ layoutExpr lexpr@(L _ expr) = do hasComments <- hasAnyCommentsBelow lexpr let (openLit, closeLit) = case boxity of Boxed -> (docLit $ Text.pack "(", docLit $ Text.pack ")") - Unboxed -> (docParenHashL, docParenHashR) + Unboxed -> (docParenHashLSep, docParenHashRSep) case splitFirstLast argDocs of FirstLastEmpty -> docSeq [ openLit diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs index 6b8e750..f409c30 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs @@ -141,7 +141,7 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of -- (#nestedpat1, nestedpat2, nestedpat3#) -> expr case boxity of Boxed -> wrapPatListy args "()" docParenL docParenR - Unboxed -> wrapPatListy args "(##)" docParenHashL docParenHashR + Unboxed -> wrapPatListy args "(##)" docParenHashLSep docParenHashRSep AsPat asName asPat -> do -- bind@nestedpat -> expr wrapPatPrepend asPat (docLit $ lrdrNameToText asName <> Text.pack "@") diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs index d50a10c..5e97d5b 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs @@ -392,33 +392,32 @@ layoutType ltype@(L _ typ) = docWrapNode ltype $ case typ of unitL = docLit $ Text.pack "()" simpleL = do docs <- docSharedWrapper layoutType `mapM` typs + let end = docLit $ Text.pack ")" + lines = List.tail docs <&> \d -> + docCols ColTyOpPrefix [docCommaSep, d] docAlt [ docSeq $ [docLit $ Text.pack "("] ++ List.intersperse docCommaSep (docForceSingleline <$> docs) - ++ [docLit $ Text.pack ")"] - , let - start = docCols ColTyOpPrefix [docParenLSep, head docs] - lines = List.tail docs <&> \d -> - docCols ColTyOpPrefix [docCommaSep, d] - end = docLit $ Text.pack ")" + ++ [end] + , let line1 = docCols ColTyOpPrefix [docParenLSep, head docs] in docPar - (docAddBaseY (BrIndentSpecial 2) $ start) + (docAddBaseY (BrIndentSpecial 2) $ line1) (docLines $ (docAddBaseY (BrIndentSpecial 2) <$> lines) ++ [end]) ] unboxedL = do docs <- docSharedWrapper layoutType `mapM` typs - let start = docParenHashL - end = docParenHashR + let start = docParenHashLSep + end = docParenHashRSep docAlt [ docSeq $ [start] - ++ List.intersperse docCommaSep docs - ++ [end] + ++ List.intersperse docCommaSep docs + ++ [end] , let - start' = docCols ColTyOpPrefix [start, head docs] + line1 = docCols ColTyOpPrefix [start, head docs] lines = List.tail docs <&> \d -> docCols ColTyOpPrefix [docCommaSep, d] in docPar - (docAddBaseY (BrIndentSpecial 2) start') + (docAddBaseY (BrIndentSpecial 2) line1) (docLines $ (docAddBaseY (BrIndentSpecial 2) <$> lines) ++ [end]) ] HsOpTy{} -> -- TODO -- 2.30.2 From 04f441205d1b5b548e9b736a06e13b23440d1fdd Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Mon, 24 Sep 2018 00:09:01 +0200 Subject: [PATCH 6/6] Try fix travis new-build test failure with a -j1 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 675395a..a67ec03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -292,7 +292,7 @@ script: canew) better_wait cabal new-build -j$JOBS --ghc-options="-j1 +RTS -M500M -RTS" --disable-tests --disable-benchmarks better_wait cabal new-build -j$JOBS --ghc-options="-j1 +RTS -M500M -RTS" --enable-tests --enable-benchmarks - cabal new-test --ghc-options="-j1 +RTS -M500M -RTS" + cabal new-test -j1 --ghc-options="-j1 +RTS -M500M -RTS" ;; esac set +ex -- 2.30.2