diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt index 6a25c6c..761dfb5 100644 --- a/src-literatetests/15-regressions.blt +++ b/src-literatetests/15-regressions.blt @@ -680,3 +680,7 @@ a = \x -> x b = \ ~x -> x c = \ !x -> x d = \(~x) -> x + +#test type signature with forall and constraint +{-# LANGUAGE RankNTypes #-} +func :: forall b . Show b => b -> String diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs index ef34942..cf9d10c 100644 --- a/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs +++ b/src/Language/Haskell/Brittany/Internal/Layouters/Type.hs @@ -766,12 +766,15 @@ layoutTyVarBndrs = mapM $ \case return $ (lrdrNameToText lrdrName, Just $ d) #endif +-- there is no specific reason this returns a list instead of a single +-- BriDoc node. processTyVarBndrsSingleline :: [(Text, Maybe (ToBriDocM BriDocNumbered))] -> [ToBriDocM BriDocNumbered] processTyVarBndrsSingleline bndrDocs = bndrDocs >>= \case - (tname, Nothing) -> [docLit $ Text.pack " " <> tname] + (tname, Nothing) -> [docSeparator, docLit tname] (tname, Just doc) -> - [ docLit $ Text.pack " (" <> tname <> Text.pack " :: " + [ docSeparator + , docLit $ Text.pack "(" <> tname <> Text.pack " :: " , docForceSingleline $ doc , docLit $ Text.pack ")" ]