@@ -5,6 +5,7 @@
55-- | Rendering of types.
66module Ormolu.Printer.Meat.Type
77 ( p_hsType,
8+ p_hsTypePostDoc,
89 hasDocStrings,
910 p_hsContext,
1011 p_hsTyVarBndr,
@@ -23,14 +24,22 @@ import Ormolu.Printer.Operators
2324import Ormolu.Utils
2425
2526p_hsType :: HsType GhcPs -> R ()
26−p_hsType t = p_hsType' (hasDocStrings t) t
27+p_hsType t = p_hsType' (hasDocStrings t) PipeStyle t
2728
28−p_hsType' :: Bool -> HsType GhcPs -> R ()
29−p_hsType' multilineArgs = \case
29+p_hsTypePostDoc :: HsType GhcPs -> R ()
30+p_hsTypePostDoc t = p_hsType' (hasDocStrings t) CaretStyle t
31+
32+-- | How to render Haddocks associated with a type.
33+data TypeDocStyle
34+ = PipeStyle
35+ | CaretStyle
36+
37+p_hsType' :: Bool -> TypeDocStyle -> HsType GhcPs -> R ()
38+p_hsType' multilineArgs docStyle = \case
3039 HsForAllTy NoExtField visibility bndrs t -> do
3140 p_forallBndrs visibility p_hsTyVarBndr bndrs
3241 interArgBreak
33− p_hsType' multilineArgs (unLoc t)
42+ p_hsTypeR (unLoc t)
3443 HsQualTy NoExtField qs t -> do
3544 located qs p_hsContext
3645 space
@@ -114,9 +123,15 @@ p_hsType' multilineArgs = \case
114123 space
115124 inci (located k p_hsType)
116125 HsSpliceTy NoExtField splice -> p_hsSplice splice
117− HsDocTy NoExtField t str -> do
118− p_hsDocString Pipe True str
119− located t p_hsType
126+ HsDocTy NoExtField t str ->
127+ case docStyle of
128+ PipeStyle -> do
129+ p_hsDocString Pipe True str
130+ located t p_hsType
131+ CaretStyle -> do
132+ located t p_hsType
133+ newline
134+ p_hsDocString Caret False str
120135 HsBangTy NoExtField (HsSrcBang _ u s) t -> do
121136 case u of
122137 SrcUnpack -> txt "{-# UNPACK #-}" >> space
@@ -156,14 +171,14 @@ p_hsType' multilineArgs = \case
156171 where
157172 isPromoted = \case
158173 HsTyVar _ IsPromoted _ -> True
159− HsExplicitListTy {} -> True
160174 HsExplicitTupleTy {} -> True
175+ HsExplicitListTy {} -> True
161176 _ -> False
162177 interArgBreak =
163178 if multilineArgs
164179 then newline
165180 else breakpoint
166− p_hsTypeR = p_hsType' multilineArgs
181+ p_hsTypeR = p_hsType' multilineArgs docStyle
167182
168183-- | Return 'True' if at least one argument in 'HsType' has a doc string
169184-- attached to it.