diff --git a/lib/Language/Haskell/Stylish/Step/Data.hs b/lib/Language/Haskell/Stylish/Step/Data.hs index c82522dd..1cfa6e0e 100644 --- a/lib/Language/Haskell/Stylish/Step/Data.hs +++ b/lib/Language/Haskell/Stylish/Step/Data.hs @@ -38,7 +38,7 @@ import GHC.Hs.Types (ConDeclField (..), HsConDetails (..), HsContext, HsImplicitBndrs (..), HsTyVarBndr (..), - HsType (..), LHsQTyVars (..)) + HsType (..), LHsQTyVars (..), LHsKind) import RdrName (RdrName) import SrcLoc (GenLocated (..), Located, RealLocated) @@ -312,9 +312,11 @@ putName decl@MkDataDecl{..} = putRdrName dataDeclName space forM_ secondTvar putOutputable + maybePutKindSig else do putRdrName dataDeclName forM_ (hsq_explicit dataTypeVars) (\t -> space >> putOutputable t) + maybePutKindSig where firstTvar :: Maybe (Located (HsTyVarBndr GhcPs)) @@ -330,6 +332,12 @@ putName decl@MkDataDecl{..} = & drop 1 & listToMaybe + maybePutKindSig :: Printer () + maybePutKindSig = forM_ maybeKindSig (\k -> space >> putText "::" >> space >> putOutputable k) + + maybeKindSig :: Maybe (LHsKind GhcPs) + maybeKindSig = dd_kindSig dataDefn + putConstructor :: Config -> Int -> Located (ConDecl GhcPs) -> P () putConstructor cfg consIndent (L _ cons) = case cons of ConDeclGADT{..} -> do diff --git a/tests/Language/Haskell/Stylish/Step/Data/Tests.hs b/tests/Language/Haskell/Stylish/Step/Data/Tests.hs index 7d959046..d4c599c7 100644 --- a/tests/Language/Haskell/Stylish/Step/Data/Tests.hs +++ b/tests/Language/Haskell/Stylish/Step/Data/Tests.hs @@ -75,6 +75,7 @@ tests = testGroup "Language.Haskell.Stylish.Step.Data.Tests" , testCase "case 60" case60 , testCase "case 61 (issue 282)" case61 , testCase "case 62 (issue 273)" case62 + , testCase "case 63 (issue 338)" case63 ] case00 :: Assertion @@ -1377,6 +1378,17 @@ case62 = expected @=? testStep (step sameIndentStyle) input , " }" ] +case63 :: Assertion +case63 = expected @=? testStep (step indentIndentStyle) input + where + input = unlines + [ "module Herp where" + , "" + , "data Foo :: * -> * where" + , " Bar :: () -> Foo ()" + ] + expected = input + sameSameStyle :: Config sameSameStyle = Config SameLine SameLine 2 2 False True SameLine False True NoMaxColumns