@@ -1,42 +1,54 @@
11module Format (format) where
22
33import Prelude
4−
54import Data.Array as Array
65import Data.Array.NonEmpty as NE
76import Data.Foldable (fold, foldMap)
87import Data.Maybe (Maybe(..), maybe)
8+import Data.Monoid.Additive (Additive(..))
9+import Data.Newtype (ala)
910import Data.Semigroup.Foldable (intercalateMap)
1011import Data.Tuple (fst, snd)
1112import Data.Tuple.Nested (type (/\), (/\))
12−import Debug (spy)
13+import Partial.Unsafe (unsafeCrashWith)
1314import PureScript.CST.Print as Print
14−import PureScript.CST.Range (class RangeOf, rangeOf, tokensOf)
15+import PureScript.CST.Range (class RangeOf, class TokensOf, rangeOf, tokensOf)
1516import PureScript.CST.Range.TokenList as TokensOf
1617import PureScript.CST.Types as CST
1718import Settings (Settings)
1819
1920data Lines
20− = SingleLine | MultipleLines
21−
22−precedingEmptyLines :: Array (CST.Comment CST.LineFeed) -> Int
23−precedingEmptyLines =
24− Array.reverse >>> Array.dropWhile commentIsSpace >>> Array.head >>> case _ of
25− Just (CST.Line _ n) -> n
26− _ -> 0
27−
28−commentIsSpace :: forall c. CST.Comment c -> Boolean
29−commentIsSpace = case _ of
30− CST.Space _ -> true
31− _ -> false
32−
33−singleOrMultiline :: forall a. RangeOf a => a -> Lines
21+ = SingleLine
22+ | MultipleLines
23+
24+precedingEmptyLines ∷ Array (CST.Comment CST.LineFeed) → Int
25+precedingEmptyLines =
26+ Array.takeWhile commentIsSpaceOrLineFeed
27+ >>> map toLines
28+ >>> ala Additive foldMap
29+ where
30+ toLines = case _ of
31+ CST.Line _ n → n
32+ _ → 0
33+
34+isPrecededByBlankLines ∷ ∀ t. TokensOf t ⇒ t → Boolean
35+isPrecededByBlankLines x = case TokensOf.head (tokensOf x) of
36+ Just { leadingComments } → precedingEmptyLines leadingComments > 1
37+ Nothing → unsafeCrashWith "Unexpectedly got no tokens"
38+
39+commentIsSpaceOrLineFeed ∷ ∀ c. CST.Comment c → Boolean
40+commentIsSpaceOrLineFeed = case _ of
41+ CST.Space _ → true
42+ CST.Line _ _ → true
43+ _ → false
44+
45+singleOrMultiline ∷ ∀ a. RangeOf a ⇒ a → Lines
3446singleOrMultiline value = singleOrMultilineFromRange (rangeOf value)
3547
36−singleOrMultilineFromRange :: CST.SourceRange -> Lines
48+singleOrMultilineFromRange ∷ CST.SourceRange → Lines
3749singleOrMultilineFromRange { start, end } = if start.line == end.line then SingleLine else MultipleLines
3850
39−singleOrMultilineBetween :: forall a b. RangeOf a => RangeOf b => a -> b -> Lines
51+singleOrMultilineBetween ∷ ∀ a b. RangeOf a ⇒ RangeOf b ⇒ a → b → Lines
4052singleOrMultilineBetween a b = do
4153 let
4254 { start } = rangeOf a
@@ -44,18 +56,18 @@ singleOrMultilineBetween a b = do
4456 { end } = rangeOf b
4557 singleOrMultilineFromRange { start, end }
4658
47−rangeOfInstanceHead :: CST.InstanceHead Void -> Lines
59+rangeOfInstanceHead ∷ CST.InstanceHead Void → Lines
4860rangeOfInstanceHead { keyword, className, types } = do
4961 let
5062 { end } = case Array.last types of
51− Nothing -> rangeOf className
52− Just ty -> rangeOf ty
63+ Nothing → rangeOf className
64+ Just ty → rangeOf ty
5365 singleOrMultilineFromRange
5466 { start: keyword.range.start
5567 , end
5668 }
5769
58−rangeOfPatternGuard :: (CST.PatternGuard Void) -> CST.SourceRange
70+rangeOfPatternGuard ∷ (CST.PatternGuard Void) → CST.SourceRange
5971rangeOfPatternGuard (CST.PatternGuard { binder, expr }) = do
6072 let
6173 { start } = maybe (rangeOf expr) (fst >>> rangeOf) binder
@@ -63,28 +75,28 @@ rangeOfPatternGuard (CST.PatternGuard { binder, expr }) = do
6375 { end } = rangeOf expr
6476 { start, end }
6577
66−rangeOfSeparated ::
67− forall a.
68− (a -> CST.SourceRange) ->
69− CST.Separated a ->
78+rangeOfSeparated ∷
79+ ∀ a.
80+ (a → CST.SourceRange) →
81+ CST.Separated a →
7082 CST.SourceRange
7183rangeOfSeparated f separated = case separated of
72− CST.Separated { head, tail } -> do
84+ CST.Separated { head, tail } → do
7385 let
7486 headRange = f head
7587 let
7688 tailRange = maybe headRange f (Array.last tail <#> snd)
7789 { start: headRange.start, end: tailRange.end }
7890
79−format :: Settings -> CST.Module Void -> String
91+format ∷ Settings → CST.Module Void → String
8092format = formatModule -- Indentation is two spaces
8193
82−formatModule :: Settings -> CST.Module Void -> String
94+formatModule ∷ Settings → CST.Module Void → String
8395formatModule settings (CST.Module { header, body }) =
8496 formatModuleHeader settings header
8597 <> formatModuleBody settings body
8698
87−formatModuleHeader :: Settings -> CST.ModuleHeader Void -> String
99+formatModuleHeader ∷ Settings → CST.ModuleHeader Void → String
88100formatModuleHeader settings (CST.ModuleHeader header) =
89101 formatSourceToken settings blank blank header.keyword
90102 <> formatName settings blank space header.name
@@ -93,19 +105,19 @@ formatModuleHeader settings (CST.ModuleHeader header) =
93105 <> newline
94106 <> formatImports settings header.imports
95107
96−formatExports ::
97− Settings ->
98− Maybe (CST.DelimitedNonEmpty (CST.Export Void)) ->
108+formatExports ∷
109+ Settings →
110+ Maybe (CST.DelimitedNonEmpty (CST.Export Void)) →
99111 String
100112formatExports settings@{ indentation } exports'' = case exports'' of
101− Nothing -> blank
102− Just exports' -> do
113+ Nothing → blank
114+ Just exports' → do
103115 let
104116 indent = indentation
105117
106118 prefix = case lines of
107− MultipleLines -> newline <> indent
108− SingleLine -> space
119+ MultipleLines → newline <> indent
120+ SingleLine → space
109121 prefix
110122 <> formatDelimitedNonEmpty
111123 settings
@@ -116,66 +128,66 @@ formatExports settings@{ indentation } exports'' = case exports'' of
116128 where
117129 lines = singleOrMultiline exports'
118130
119−formatExport ::
120− Settings ->
121− Indent ->
122− CST.Export Void ->
131+formatExport ∷
132+ Settings →
133+ Indent →
134+ CST.Export Void →
123135 String
124136formatExport settings@{ indentation } indent' export' = case export' of
125− CST.ExportClass class' name' -> do
137+ CST.ExportClass class' name' → do
126138 formatSourceToken settings indent' blank class'
127139 <> formatName settings indent' space name'
128− CST.ExportKind kind name' -> do
140+ CST.ExportKind kind name' → do
129141 formatSourceToken settings indent' blank kind
130142 <> formatName settings indent' space name'
131− CST.ExportModule module'' name' -> do
143+ CST.ExportModule module'' name' → do
132144 formatSourceToken settings indent' blank module''
133145 <> formatName settings indent' space name'
134− CST.ExportOp name' -> do
146+ CST.ExportOp name' → do
135147 formatName settings indent' blank name'
136− CST.ExportType name' dataMembers' -> do
148+ CST.ExportType name' dataMembers' → do
137149 let
138150 indentTrick = indent' <> indentation
139151
140152 indent /\ prefix = case lines of
141− MultipleLines -> indentTrick /\ (newline <> indentTrick)
142− SingleLine -> indent' /\ blank
153+ MultipleLines → indentTrick /\ (newline <> indentTrick)
154+ SingleLine → indent' /\ blank
143155 formatName settings indent' blank name'
144156 <> prefix
145157 <> foldMap (formatDataMembers settings indent) dataMembers'
146− CST.ExportTypeOp type'' name' -> do
158+ CST.ExportTypeOp type'' name' → do
147159 formatSourceToken settings indent' blank type''
148160 <> formatName settings indent' space name'
149− CST.ExportValue name' -> do
161+ CST.ExportValue name' → do
150162 formatName settings indent' blank name'
151− CST.ExportError e -> absurd e
163+ CST.ExportError e → absurd e
152164 where
153165 lines = singleOrMultiline export'
154166
155−formatImports ::
156− Settings ->
157− Array (CST.ImportDecl Void) ->
167+formatImports ∷
168+ Settings →
169+ Array (CST.ImportDecl Void) →
158170 String
159171formatImports settings imports' = case imports' of
160− [] -> blank
161− _ -> do
172+ [] → blank
173+ _ → do
162174 let
163175 indent = blank
164176 foldMap
165− ( \importDecl ->
177+ ( \importDecl →
166178 newline
167179 <> formatImportDeclaration settings indent importDecl
168180 )
169181 imports'
170182 <> newline
171183
172−formatImportDeclaration ::
173− Settings ->
174− Indent ->
175− CST.ImportDecl Void ->
184+formatImportDeclaration ∷
185+ Settings →
186+ Indent →
187+ CST.ImportDecl Void →
176188 String
177189formatImportDeclaration settings@{ indentation } indent'' importDecl' = case importDecl' of
178− CST.ImportDecl { keyword: import'', module: name'', names: imports'', qualified: rename } -> do
190+ CST.ImportDecl { keyword: import'', module: name'', names: imports'', qualified: rename } → do
179191 let
180192 span = singleOrMultiline importDecl'
181193 let
@@ -183,16 +195,16 @@ formatImportDeclaration settings@{ indentation } indent'' importDecl' = case imp
183195 formatSourceToken settings indent'' blank import''
184196 <> formatName settings indent'' space name''
185197 <> foldMap
186− ( \(hiding' /\ imports') -> case hiding' of
187− Just hiding -> do
198+ ( \(hiding' /\ imports') → case hiding' of
199+ Just hiding → do
188200 let
189201 hidingPrefix = case span of
190− MultipleLines -> newline <> indent'
191− SingleLine -> space
202+ MultipleLines → newline <> indent'
203+ SingleLine → space
192204
193205 importPrefix = case span of
194− MultipleLines -> newline <> indent
195− SingleLine -> space
206+ MultipleLines → newline <> indent
207+ SingleLine → space
196208
197209 indent = indent' <> indentation
198210 hidingPrefix
@@ -204,11 +216,11 @@ formatImportDeclaration settings@{ indentation } indent'' importDecl' = case imp
204216 indent
205217 (formatImport settings indent')
206218 imports'
207− Nothing -> do
219+ Nothing → do
208220 let
209221 importPrefix = case span of
210− MultipleLines -> newline <> indent'
211− SingleLine -> space
222+ MultipleLines → newline <> indent'
223+ SingleLine → space
212224 importPrefix
213225 <> formatDelimitedNonEmpty
214226 settings
@@ -219,60 +231,60 @@ formatImportDeclaration settings@{ indentation } indent'' importDecl' = case imp
219231 )
220232 imports''
221233 <> foldMap
222− ( \(as /\ name') -> do
234+ ( \(as /\ name') → do
223235 let
224236 prefix = case span of
225− MultipleLines -> newline <> indent'
226− SingleLine -> space
237+ MultipleLines → newline <> indent'
238+ SingleLine → space
227239 prefix
228240 <> formatSourceToken settings indent' blank as
229241 <> formatName settings indent' space name'
230242 )
231243 rename
232244
233−formatImport ::
234− Settings ->
235− Indent ->
236− CST.Import Void ->
245+formatImport ∷
246+ Settings →
247+ Indent →
248+ CST.Import Void →
237249 String
238250formatImport settings@{ indentation } indent' import'' = case import'' of
239− CST.ImportClass class' name' -> do
251+ CST.ImportClass class' name' → do
240252 formatSourceToken settings indent' blank class'
241253 <> formatName settings indent' space name'
242− CST.ImportKind kind name' -> do
254+ CST.ImportKind kind name' → do
243255 formatSourceToken settings indent' blank kind
244256 <> formatName settings indent' space name'
245− CST.ImportOp name' -> do
257+ CST.ImportOp name' → do
246258 formatName settings indent' blank name'
247− CST.ImportType name' dataMembers' -> do
259+ CST.ImportType name' dataMembers' → do
248260 let
249261 indent = case lines of
250− MultipleLines -> indent' <> indentation
251− SingleLine -> indent'
262+ MultipleLines → indent' <> indentation
263+ SingleLine → indent'
252264 formatName settings indent' blank name'
253265 <> foldMap (formatDataMembers settings indent) dataMembers'
254− CST.ImportTypeOp type'' name' -> do
266+ CST.ImportTypeOp type'' name' → do
255267 formatSourceToken settings indent' blank type''
256268 <> formatName settings indent' space name'
257− CST.ImportValue name' -> do
269+ CST.ImportValue name' → do
258270 formatName settings indent' blank name'
259− CST.ImportError e -> absurd e
271+ CST.ImportError e → absurd e
260272 where
261273 lines = singleOrMultiline import''
262274
263−formatDataMembers ::
264− Settings ->
265− Indent ->
266− CST.DataMembers ->
275+formatDataMembers ∷
276+ Settings →
277+ Indent →
278+ CST.DataMembers →
267279 String
268280formatDataMembers settings@{ indentation } indent' dataMembers' = case dataMembers' of
269− CST.DataAll sourceToken' -> do
281+ CST.DataAll sourceToken' → do
270282 formatSourceToken settings indent' blank sourceToken'
271− CST.DataEnumerated delimited' -> do
283+ CST.DataEnumerated delimited' → do
272284 let
273285 (indent /\ prefix) = case span of
274− MultipleLines -> (indent' <> indentation) /\ (newline <> indent')
275− SingleLine -> (indent' /\ blank)
286+ MultipleLines → (indent' <> indentation) /\ (newline <> indent')
287+ SingleLine → (indent' /\ blank)
276288 prefix
277289 <> formatDelimited
278290 settings
@@ -282,12 +294,12 @@ formatDataMembers settings@{ indentation } indent' dataMembers' = case dataMembe
282294 where
283295 span = singleOrMultiline dataMembers'
284296
285−formatDelimited ::
286− forall a.
287− Settings ->
288− Indent ->
289− (a -> String) ->
290− CST.Delimited a ->
297+formatDelimited ∷
298+ ∀ a.
299+ Settings →
300+ Indent →
301+ (a → String) →
302+ CST.Delimited a →
291303 String
292304formatDelimited settings indent formatValue delimited = do
293305 formatWrapped
@@ -298,22 +310,22 @@ formatDelimited settings indent formatValue delimited = do
298310 where
299311 lines = singleOrMultiline delimited
300312
301−formatModuleBody :: Settings -> CST.ModuleBody Void -> String
313+formatModuleBody ∷ Settings → CST.ModuleBody Void → String
302314formatModuleBody settings@{ indentation } (CST.ModuleBody { decls, trailingComments }) =
303315 formatDeclarations settings decls
304316 <> formatCommentsTrailingModule trailingComments
305317
306−formatDeclarations ::
307− Settings ->
308− Array (CST.Declaration Void) ->
318+formatDeclarations ∷
319+ Settings →
320+ Array (CST.Declaration Void) →
309321 String
310322formatDeclarations settings = foldMap formatOne
311323 where
312324 formatOne declaration = newline <> formatDeclaration settings blank declaration
313325
314−formatDeclaration :: Settings -> Indent -> CST.Declaration Void -> String
326+formatDeclaration ∷ Settings → Indent → CST.Declaration Void → String
315327formatDeclaration settings@{ indentation } indent declaration = case declaration of
316− CST.DeclData dataHead maybeConstructors -> do
328+ CST.DeclData dataHead maybeConstructors → do
317329 formatDataHead settings indent dataHead
318330 <> foldMap formatDataConstructors maybeConstructors
319331 <> newline
@@ -328,7 +340,7 @@ formatDeclaration settings@{ indentation } indent declaration = case declaration
328340 blank
329341 (formatDataConstructor settings indented)
330342 constructors
331− CST.DeclType dataHead equals typo ->
343+ CST.DeclType dataHead equals typo →
332344 formatDataHead settings indent dataHead
333345 <> newline
334346 <> indented
@@ -336,7 +348,7 @@ formatDeclaration settings@{ indentation } indent declaration = case declaration
336348 <> space
337349 <> formatType settings (indented <> indentation) (singleOrMultiline typo) typo
338350 <> newline
339− CST.DeclNewtype dataHead equals name typo -> do
351+ CST.DeclNewtype dataHead equals name typo → do
340352 formatDataHead settings indent dataHead
341353 <> (newline <> indented)
342354 <> formatSourceToken settings indented blank equals
@@ -347,9 +359,9 @@ formatDeclaration settings@{ indentation } indent declaration = case declaration
347359 <> newline
348360 where
349361 prefix = case singleOrMultilineBetween name typo of
350− MultipleLines -> newline <> indented
351− SingleLine -> space
352− CST.DeclClass classHead members -> do
362+ MultipleLines → newline <> indented
363+ SingleLine → space
364+ CST.DeclClass classHead members → do
353365 formatClassHead lines settings indent classHead
354366 <> foldMap formatMember members
355367 <> newline
@@ -359,7 +371,7 @@ formatDeclaration settings@{ indentation } indent declaration = case declaration
359371 <> intercalateMap (newline <> indented) formatLabeledMember labeleds
360372
361373 formatLabeledMember labeled = newline <> indented <> formatLabeledNameType settings indented labeled
362− CST.DeclInstanceChain instances ->
374+ CST.DeclInstanceChain instances →
363375 formatSeparated
364376 settings
365377 (singleOrMultiline instances)
@@ -368,89 +380,89 @@ formatDeclaration settings@{ indentation } indent declaration = case declaration
368380 (formatInstance settings indent)
369381 instances
370382 <> newline
371− CST.DeclDerive sourceToken newtype' instanceHead ->
383+ CST.DeclDerive sourceToken newtype' instanceHead →
372384 formatSourceToken settings indent blank sourceToken
373385 <> foldMap (formatSourceToken settings indent space) newtype'
374386 <> space
375387 <> formatInstanceHead settings indent instanceHead
376388 <> newline
377− CST.DeclKindSignature kindOfDeclaration labeled ->
389+ CST.DeclKindSignature kindOfDeclaration labeled →
378390 formatSourceToken settings indentation indent kindOfDeclaration
379391 <> space
380392 <> formatLabeledNameType settings indent labeled
381− CST.DeclSignature labeled -> formatLabeledNameType settings indent labeled
382− CST.DeclValue valueBindingFields ->
393+ CST.DeclSignature labeled → formatLabeledNameType settings indent labeled
394+ CST.DeclValue valueBindingFields →
383395 formatValueBindingFields settings indent valueBindingFields
384396 <> newline
385− CST.DeclFixity fixityFields -> formatFixityFields settings indent fixityFields <> newline
386− CST.DeclForeign foreign'' import'' foreign''' ->
397+ CST.DeclFixity fixityFields → formatFixityFields settings indent fixityFields <> newline
398+ CST.DeclForeign foreign'' import'' foreign''' →
387399 formatSourceToken settings indent blank foreign''
388400 <> formatSourceToken settings indent space import''
389401 <> space
390402 <> formatForeign settings indent foreign'''
391403 <> newline
392− CST.DeclRole type'' role'' name' roles -> do
404+ CST.DeclRole type'' role'' name' roles → do
393405 formatSourceToken settings indentation indent type''
394406 <> space
395407 <> formatSourceToken settings indentation indent role''
396408 <> space
397409 <> formatName settings indent blank name'
398410 <> foldMap
399− ( \role' ->
411+ ( \role' →
400412 space <> formatRole settings indent role'
401413 )
402414 roles
403415 <> newline
404− CST.DeclError e -> absurd e
416+ CST.DeclError e → absurd e
405417 where
406418 indented = indent <> indentation
407419
408420 lines = singleOrMultiline declaration
409421
410−formatRole ::
411− Settings ->
412− Indent ->
413− (CST.SourceToken /\ CST.Role) ->
422+formatRole ∷
423+ Settings →
424+ Indent →
425+ (CST.SourceToken /\ CST.Role) →
414426 String
415427formatRole settings@{ indentation } indent (sourceToken /\ role) = do
416428 formatSourceToken settings indentation indent sourceToken
417429
418−formatForeign ::
419− Settings ->
420− Indent ->
421− CST.Foreign Void ->
430+formatForeign ∷
431+ Settings →
432+ Indent →
433+ CST.Foreign Void →
422434 String
423435formatForeign settings indent' foreign'' = case foreign'' of
424− CST.ForeignData data' labeled' -> do
436+ CST.ForeignData data' labeled' → do
425437 formatSourceToken settings indent' blank data'
426438 <> space
427439 <> formatLabeledNameKind settings indent' labeled'
428− CST.ForeignKind kind name' -> do
440+ CST.ForeignKind kind name' → do
429441 formatSourceToken settings indent' blank kind
430442 <> formatName settings indent' space name'
431− CST.ForeignValue labeled' -> do
443+ CST.ForeignValue labeled' → do
432444 formatLabeledNameType settings indent' labeled'
433445
434−formatLabeledNameKind ::
435− forall a.
436− Settings ->
437− Indent ->
446+formatLabeledNameKind ∷
447+ ∀ a.
448+ Settings →
449+ Indent →
438450 CST.Labeled
439451 (CST.Name a)
440− (CST.Type Void) ->
452+ (CST.Type Void) →
441453 String
442454formatLabeledNameKind settings indent labeled =
443455 formatLabeled
444456 settings
445457 indent
446458 (formatName settings indent blank)
447− (\x -> formatType settings x (singleOrMultiline labeled))
459+ (\x → formatType settings x (singleOrMultiline labeled))
448460 labeled
449461
450−formatFixityFields ::
451− Settings ->
452− Indent ->
453− CST.FixityFields ->
462+formatFixityFields ∷
463+ Settings →
464+ Indent →
465+ CST.FixityFields →
454466 String
455467formatFixityFields settings indent { keyword: infix' /\ _, prec: precedence /\ _, operator } = do
456468 formatSourceToken settings indent blank infix'
@@ -458,26 +470,26 @@ formatFixityFields settings indent { keyword: infix' /\ _, prec: precedence /\ _
458470 <> space
459471 <> formatFixityOp settings indent operator
460472
461−formatFixityOp ::
462− Settings ->
463− Indent ->
464− CST.FixityOp ->
473+formatFixityOp ∷
474+ Settings →
475+ Indent →
476+ CST.FixityOp →
465477 String
466478formatFixityOp settings indent fixityOp' = case fixityOp' of
467− CST.FixityType type'' name' as op -> do
479+ CST.FixityType type'' name' as op → do
468480 formatSourceToken settings indent blank type''
469481 <> formatQualifiedName settings indent space name'
470482 <> formatSourceToken settings indent space as
471483 <> formatName settings indent space op
472− CST.FixityValue name' as op -> do
484+ CST.FixityValue name' as op → do
473485 formatQualifiedName settings indent blank name'
474486 <> formatSourceToken settings indent space as
475487 <> formatName settings indent space op
476488
477−formatInstance ::
478− Settings ->
479− Indent ->
480− CST.Instance Void ->
489+formatInstance ∷
490+ Settings →
491+ Indent →
492+ CST.Instance Void →
481493 String
482494formatInstance settings@{ indentation } indent (CST.Instance { head, body }) =
483495 formatInstanceHead settings indent head
@@ -491,10 +503,10 @@ formatInstance settings@{ indentation } indent (CST.Instance { head, body }) =
491503
492504 indented = indent <> indentation
493505
494−formatInstanceHead ::
495− Settings ->
496− Indent ->
497− CST.InstanceHead Void ->
506+formatInstanceHead ∷
507+ Settings →
508+ Indent →
509+ CST.InstanceHead Void →
498510 String
499511formatInstanceHead settings@{ indentation } indent'' instanceHead@{ keyword: instance''
500512, nameAndSeparator
@@ -506,50 +518,50 @@ formatInstanceHead settings@{ indentation } indent'' instanceHead@{ keyword: ins
506518 lines = rangeOfInstanceHead instanceHead
507519
508520 (indent /\ indent' /\ prefix) = case lines of
509− MultipleLines ->
521+ MultipleLines →
510522 (indent'' <> indentation <> indentation)
511523 /\ (indent'' <> indentation)
512524 /\ (newline <> indent'' <> indentation)
513− SingleLine -> (indent'' /\ indent'' /\ space)
525+ SingleLine → (indent'' /\ indent'' /\ space)
514526
515527 typePrefix = case Array.last types of
516− Just lastType -> case singleOrMultilineBetween className lastType of
517− MultipleLines -> newline <> indent
518− SingleLine -> space
519− Nothing -> space
528+ Just lastType → case singleOrMultilineBetween className lastType of
529+ MultipleLines → newline <> indent
530+ SingleLine → space
531+ Nothing → space
520532 formatSourceToken settings indent'' blank instance''
521533 <> foldMap
522− ( \{ name: name', separator: colons } ->
534+ ( \{ name: name', separator: colons } →
523535 formatName settings indent'' space name'
524536 <> formatSourceToken settings indent'' space colons
525537 )
526538 nameAndSeparator
527539 <> foldMap
528− ( \(constraints /\ arrow) ->
540+ ( \(constraints /\ arrow) →
529541 prefix
530542 <> formatOneOrDelimited
531543 settings
532544 lines
533545 indent'
534− (\t -> formatType settings indent (singleOrMultiline t) t)
546+ (\t → formatType settings indent (singleOrMultiline t) t)
535547 constraints
536548 <> formatSourceToken settings indent' space arrow
537549 )
538550 constraints'
539551 <> formatQualifiedName settings indent' prefix className
540552 <> foldMap
541− (\type'' -> typePrefix <> formatType settings indent (singleOrMultiline type'') type'')
553+ (\type'' → typePrefix <> formatType settings indent (singleOrMultiline type'') type'')
542554 types
543555
544−formatInstanceBinding ::
545− Settings ->
546− Indent ->
547− CST.InstanceBinding Void ->
556+formatInstanceBinding ∷
557+ Settings →
558+ Indent →
559+ CST.InstanceBinding Void →
548560 String
549561formatInstanceBinding settings indent = case _ of
550− CST.InstanceBindingSignature labeled -> do
562+ CST.InstanceBindingSignature labeled → do
551563 formatLabeledNameType settings indent labeled
552− CST.InstanceBindingName valueBindingFields -> do
564+ CST.InstanceBindingName valueBindingFields → do
553565 formatValueBindingFields settings indent valueBindingFields
554566
555567-- | This is for basics like function or value definitions
@@ -558,10 +570,10 @@ formatInstanceBinding settings indent = case _ of
558570-- | x <- [1,2,3]
559571-- | x | x `mod` 2 == 0 -> [1,2,3]
560572-- | ```
561−formatValueBindingFields ::
562− Settings ->
563− Indent ->
564− CST.ValueBindingFields Void ->
573+formatValueBindingFields ∷
574+ Settings →
575+ Indent →
576+ CST.ValueBindingFields Void →
565577 String
566578formatValueBindingFields settings indent { name, binders, guarded } =
567579 formatName settings indent blank name
@@ -570,55 +582,55 @@ formatValueBindingFields settings indent { name, binders, guarded } =
570582 where
571583 formatValueBinder binder = space <> formatBinder settings indent binder
572584
573−formatBinder ::
574− Settings ->
575− Indent ->
576− CST.Binder Void ->
585+formatBinder ∷
586+ Settings →
587+ Indent →
588+ CST.Binder Void →
577589 String
578590formatBinder settings@{ indentation } indent' binder = case binder of
579− CST.BinderArray delimited -> do
591+ CST.BinderArray delimited → do
580592 formatArray
581593 settings
582594 lines
583595 indent'
584596 (formatBinder settings indent')
585597 delimited
586− CST.BinderBoolean boolean _ -> do
598+ CST.BinderBoolean boolean _ → do
587599 formatSourceToken settings indent' blank boolean
588− CST.BinderChar char _ -> do
600+ CST.BinderChar char _ → do
589601 formatSourceToken settings indent' blank char
590− CST.BinderConstructor name' binders -> do
602+ CST.BinderConstructor name' binders → do
591603 let
592604 prefix = case singleOrMultiline binder of
593− MultipleLines -> newline <> indent' <> indentation
594− SingleLine -> space
605+ MultipleLines → newline <> indent' <> indentation
606+ SingleLine → space
595607 formatQualifiedName settings indent' blank name'
596608 <> foldMap
597− (\binder' -> prefix <> formatBinder settings indent' binder')
609+ (\binder' → prefix <> formatBinder settings indent' binder')
598610 binders
599− CST.BinderNamed name' at binder' -> do
611+ CST.BinderNamed name' at binder' → do
600612 formatName settings indent' blank name'
601613 <> formatSourceToken settings indent' blank at
602614 <> formatBinder settings indent' binder'
603− CST.BinderNumber negative number _ -> do
615+ CST.BinderNumber negative number _ → do
604616 foldMap (formatSourceToken settings indent' blank) negative
605617 <> formatSourceToken settings indent' blank number
606− CST.BinderOp binder1 binders -> do
618+ CST.BinderOp binder1 binders → do
607619 formatBinder (settings { indentation = indent' }) prefix binder1 -- [TODO] check
608620 <> foldMap formatNamedBinder binders
609621 where
610622 indentTrick = indent' <> indentation
611623
612624 indent /\ prefix = case lines of
613− MultipleLines -> indentTrick /\ (newline <> indentTrick)
614− SingleLine -> indent' /\ space
625+ MultipleLines → indentTrick /\ (newline <> indentTrick)
626+ SingleLine → indent' /\ space
615627
616628 formatNamedBinder (name /\ binder) =
617629 formatQualifiedName settings indent' prefix name
618630 <> prefix
619631 <> formatBinder settings indent binder
620− CST.BinderParens wrapped -> formatParens lines settings indent' (formatBinder settings) wrapped
621− CST.BinderRecord delimited -> do
632+ CST.BinderParens wrapped → formatParens lines settings indent' (formatBinder settings) wrapped
633+ CST.BinderRecord delimited → do
622634 formatRecord
623635 settings
624636 indent'
@@ -628,110 +640,118 @@ formatBinder settings@{ indentation } indent' binder = case binder of
628640 (formatBinder settings)
629641 )
630642 delimited
631− CST.BinderString string _ -> do
643+ CST.BinderString string _ → do
632644 formatSourceToken settings indent' blank string
633− CST.BinderTyped binder' colons type'' -> do
645+ CST.BinderTyped binder' colons type'' → do
634646 let
635647 indentTrick = indent' <> indentation
636648
637649 indent /\ prefix = case lines of
638− MultipleLines -> indentTrick /\ (newline <> indentTrick)
639− SingleLine -> indent' /\ space
650+ MultipleLines → indentTrick /\ (newline <> indentTrick)
651+ SingleLine → indent' /\ space
640652 formatBinder settings indent' binder'
641653 <> formatSourceToken settings indent' space colons
642654 <> prefix
643655 <> formatType settings indent lines type''
644− CST.BinderVar name' -> formatName settings indent' blank name'
645− CST.BinderWildcard wildcard -> formatSourceToken settings indent' blank wildcard
646− CST.BinderInt negative int _ ->
656+ CST.BinderVar name' → formatName settings indent' blank name'
657+ CST.BinderWildcard wildcard → formatSourceToken settings indent' blank wildcard
658+ CST.BinderInt negative int _ →
647659 foldMap (formatSourceToken settings indent' blank) negative
648660 <> formatSourceToken settings indent' blank int
649− CST.BinderError x -> absurd x
661+ CST.BinderError x → absurd x
650662 where
651663 lines = singleOrMultiline binder
652664
653−formatGuarded ::
654− Settings ->
655− Indent ->
656− CST.Guarded Void ->
665+formatGuarded ∷
666+ Settings →
667+ Indent →
668+ CST.Guarded Void →
657669 String
658670formatGuarded settings@{ indentation } indent' = case _ of
659− CST.Guarded guardedExprs -> do
671+ CST.Guarded guardedExprs → do
660672 let
661673 indent = indent' <> indentation
662674 foldMap
663− ( \guardedExpr ->
675+ ( \guardedExpr →
664676 (newline <> indent)
665677 <> formatGuardedExpr settings indent guardedExpr
666678 )
667679 guardedExprs
668− CST.Unconditional separator whereToken -> do
680+ CST.Unconditional separator whereToken → do
669681 formatSourceToken settings indent' space separator
670682 <> formatWhere settings indent' whereToken
671683
672−formatWhere ::
673− Settings ->
674− Indent ->
675− CST.Where Void ->
684+formatWhere ∷
685+ Settings →
686+ Indent →
687+ CST.Where Void →
676688 String
677689formatWhere settings@{ indentation } indent' (CST.Where { expr: expr', bindings: letBindings'' }) = do
678690 formatExprPrefix (singleOrMultiline expr') settings indent' expr'
679691 <> foldMap formatWhereAndBindings letBindings''
680692 where
681− indent = indent' <> indentation
682− formatWhereAndBindings (where'' /\ letBindings') = do
683− (newline <> indent)
684− <> formatSourceToken settings indent blank where''
685− <> formatLetBindings letBindings'
686− formatLetBindings letBindings' =
687− foldMap
688− formatLetBindingWithFollowing
689− ( NE.zip letBindings'
690− (NE.snoc' (Just <$> NE.tail letBindings') Nothing)
691− )
692−
693− formatLetBindingWithFollowing (current /\ maybeFollowing) =
694− formatLetBinding settings indent (newline <> indent) suffix current
695− where
696− suffix = case maybeFollowing of
697− Nothing -> blank -- no newline on last entry
698− Just followingLetBinding -> case TokensOf.head (tokensOf followingLetBinding) of
699− Just { leadingComments } ->
700− if precedingEmptyLines leadingComments > 1 then
701− newline
702− else blank
703− Nothing -> blank
704−
705−formatLetBinding ::
706− Settings ->
707− Indent ->
708− Prefix ->
709− Suffix ->
710− CST.LetBinding Void ->
693+ indent = indent' <> indentation
694+
695+ formatWhereAndBindings (where'' /\ letBindings') = do
696+ (wherePrefix <> newline <> indent)
697+ <> formatSourceToken settings indent blank where''
698+ <> whereSuffix
699+ <> formatLetBindings letBindings'
700+ where
701+ wherePrefix = if precedingEmptyLines where''.leadingComments > 1 then newline else blank
702+ whereSuffix =
703+ if isPrecededByBlankLines (NE.head letBindings') then
704+ newline
705+ else
706+ blank
707+
708+ formatLetBindings letBindings' =
709+ foldMap
710+ formatLetBindingWithFollowing
711+ ( NE.zip letBindings'
712+ (NE.snoc' (Just <$> NE.tail letBindings') Nothing)
713+ )
714+
715+ formatLetBindingWithFollowing (current /\ maybeFollowing) = formatLetBinding settings indent (newline <> indent) suffix current
716+ where
717+ suffix = case maybeFollowing of
718+ Nothing → blank -- no newline on last entry
719+ Just followingLetBinding →
720+ if isPrecededByBlankLines followingLetBinding then
721+ newline
722+ else
723+ blank
724+
725+formatLetBinding ∷
726+ Settings →
727+ Indent →
728+ Prefix →
729+ Suffix →
730+ CST.LetBinding Void →
711731 String
712732formatLetBinding settings@{ indentation } indent' prefix suffix = case _ of
713− CST.LetBindingName valueBindingFields' -> do
733+ CST.LetBindingName valueBindingFields' → do
714734 prefix
715735 <> formatValueBindingFields settings indent' valueBindingFields'
716736 <> suffix
717− CST.LetBindingPattern binder' equals where'' -> do
737+ CST.LetBindingPattern binder' equals where'' → do
718738 prefix
719739 <> formatBinder settings indent' binder'
720740 <> formatSourceToken settings indent' space equals
721741 <> formatWhere settings indent' where''
722742 <> suffix
723− CST.LetBindingSignature labeled' -> do
743+ CST.LetBindingSignature labeled' → do
724744 prefix
725745 <> formatLabeledNameType settings indent' labeled'
726− CST.LetBindingError e -> absurd e
746+ CST.LetBindingError e → absurd e
727747
728−formatGuardedExpr ::
729− Settings ->
730− Indent ->
731− CST.GuardedExpr Void ->
748+formatGuardedExpr ∷
749+ Settings →
750+ Indent →
751+ CST.GuardedExpr Void →
732752 String
733753formatGuardedExpr settings@{ indentation } indent' expr = case expr of
734− CST.GuardedExpr { bar, patterns: patternGuards, separator, where: where'' } -> do
754+ CST.GuardedExpr { bar, patterns: patternGuards, separator, where: where'' } → do
735755 let
736756 indent = indent' <> indentation
737757 formatSourceToken settings indent' blank bar
@@ -747,162 +767,162 @@ formatGuardedExpr settings@{ indentation } indent' expr = case expr of
747767 <> formatSourceToken settings indent' blank separator
748768 <> formatWhere settings indent' where''
749769
750−formatPatternGuard ::
751− Settings ->
752− Indent ->
753− CST.PatternGuard Void ->
770+formatPatternGuard ∷
771+ Settings →
772+ Indent →
773+ CST.PatternGuard Void →
754774 String
755775formatPatternGuard settings@{ indentation } indent patternGuard@(CST.PatternGuard { binder, expr: expr' }) = case binder of
756− Just (binder' /\ arrow) ->
776+ Just (binder' /\ arrow) →
757777 formatBinder settings indent binder'
758778 <> formatSourceToken settings indent space arrow
759779 <> formatExprPrefix lines settings indent expr'
760− Nothing -> formatExpr settings indent expr'
780+ Nothing → formatExpr settings indent expr'
761781 where
762782 lines = singleOrMultilineFromRange (rangeOfPatternGuard patternGuard)
763783
764−formatExprPrefix :: Lines -> Settings -> Indent -> CST.Expr Void -> String
784+formatExprPrefix ∷ Lines → Settings → Indent → CST.Expr Void → String
765785formatExprPrefix lines settings@{ indentation } indent' expr = prefix <> formatExpr settings indent expr
766786 where
767787 indent = case expr of
768− CST.ExprAdo _ -> indent'
769− CST.ExprApp _ _ -> indent' <> indentation
770− CST.ExprArray _ -> indent' <> indentation
771− CST.ExprBoolean _ _ -> indent' <> indentation
772− CST.ExprCase _ -> indent'
773− CST.ExprChar _ _ -> indent' <> indentation
774− CST.ExprConstructor _ -> indent' <> indentation
775− CST.ExprDo _ -> indent'
776− CST.ExprHole _ -> indent' <> indentation
777− CST.ExprIdent _ -> indent' <> indentation
778− CST.ExprIf _ -> indent' <> indentation
779− CST.ExprInfix _ _ -> indent' <> indentation
780− CST.ExprLambda _ -> indent'
781− CST.ExprLet _ -> indent' <> indentation
782− CST.ExprNegate _ _ -> indent' <> indentation
783− CST.ExprNumber _ _ -> indent' <> indentation
784− CST.ExprOp _ _ -> indent' <> indentation
785− CST.ExprOpName _ -> indent' <> indentation
786− CST.ExprParens _ -> indent' <> indentation
787− CST.ExprRecord _ -> indent' <> indentation
788− CST.ExprRecordAccessor _ -> indent' <> indentation
789− CST.ExprRecordUpdate _ _ -> indent' <> indentation
790− CST.ExprSection _ -> indent' <> indentation
791− CST.ExprString _ _ -> indent' <> indentation
792− CST.ExprTyped _ _ _ -> indent' <> indentation
793− CST.ExprInt _ _ -> indent' <> indentation
794− CST.ExprError e -> absurd e
788+ CST.ExprAdo _ → indent'
789+ CST.ExprApp _ _ → indent' <> indentation
790+ CST.ExprArray _ → indent' <> indentation
791+ CST.ExprBoolean _ _ → indent' <> indentation
792+ CST.ExprCase _ → indent'
793+ CST.ExprChar _ _ → indent' <> indentation
794+ CST.ExprConstructor _ → indent' <> indentation
795+ CST.ExprDo _ → indent'
796+ CST.ExprHole _ → indent' <> indentation
797+ CST.ExprIdent _ → indent' <> indentation
798+ CST.ExprIf _ → indent' <> indentation
799+ CST.ExprInfix _ _ → indent' <> indentation
800+ CST.ExprLambda _ → indent'
801+ CST.ExprLet _ → indent' <> indentation
802+ CST.ExprNegate _ _ → indent' <> indentation
803+ CST.ExprNumber _ _ → indent' <> indentation
804+ CST.ExprOp _ _ → indent' <> indentation
805+ CST.ExprOpName _ → indent' <> indentation
806+ CST.ExprParens _ → indent' <> indentation
807+ CST.ExprRecord _ → indent' <> indentation
808+ CST.ExprRecordAccessor _ → indent' <> indentation
809+ CST.ExprRecordUpdate _ _ → indent' <> indentation
810+ CST.ExprSection _ → indent' <> indentation
811+ CST.ExprString _ _ → indent' <> indentation
812+ CST.ExprTyped _ _ _ → indent' <> indentation
813+ CST.ExprInt _ _ → indent' <> indentation
814+ CST.ExprError e → absurd e
795815
796816 multiLine = case expr of
797− CST.ExprAdo _ -> space
798− CST.ExprApp _ _ -> newline <> indent
799− CST.ExprArray _ -> newline <> indent
800− CST.ExprBoolean _ _ -> newline <> indent
801− CST.ExprCase _ -> space
802− CST.ExprChar _ _ -> newline <> indent
803− CST.ExprConstructor _ -> newline <> indent
804− CST.ExprDo _ -> space
805− CST.ExprHole _ -> newline <> indent
806− CST.ExprIdent _ -> newline <> indent
807− CST.ExprIf _ -> newline <> indent
808− CST.ExprInfix _ _ -> newline <> indent
809− CST.ExprLambda _ -> space
810− CST.ExprLet _ -> newline <> indent
811− CST.ExprNegate _ _ -> newline <> indent
812− CST.ExprNumber _ _ -> newline <> indent
813− CST.ExprOp _ _ -> newline <> indent
814− CST.ExprOpName _ -> newline <> indent
815− CST.ExprParens _ -> newline <> indent
816− CST.ExprRecord _ -> newline <> indent
817− CST.ExprRecordAccessor _ -> newline <> indent
818− CST.ExprRecordUpdate _ _ -> newline <> indent
819− CST.ExprSection _ -> newline <> indent
820− CST.ExprString _ _ -> newline <> indent
821− CST.ExprTyped _ _ _ -> newline <> indent
822− CST.ExprInt _ _ -> newline <> indent
823− CST.ExprError e -> absurd e
824−
825− prefix :: String
817+ CST.ExprAdo _ → space
818+ CST.ExprApp _ _ → newline <> indent
819+ CST.ExprArray _ → newline <> indent
820+ CST.ExprBoolean _ _ → newline <> indent
821+ CST.ExprCase _ → space
822+ CST.ExprChar _ _ → newline <> indent
823+ CST.ExprConstructor _ → newline <> indent
824+ CST.ExprDo _ → space
825+ CST.ExprHole _ → newline <> indent
826+ CST.ExprIdent _ → newline <> indent
827+ CST.ExprIf _ → newline <> indent
828+ CST.ExprInfix _ _ → newline <> indent
829+ CST.ExprLambda _ → space
830+ CST.ExprLet _ → newline <> indent
831+ CST.ExprNegate _ _ → newline <> indent
832+ CST.ExprNumber _ _ → newline <> indent
833+ CST.ExprOp _ _ → newline <> indent
834+ CST.ExprOpName _ → newline <> indent
835+ CST.ExprParens _ → newline <> indent
836+ CST.ExprRecord _ → newline <> indent
837+ CST.ExprRecordAccessor _ → newline <> indent
838+ CST.ExprRecordUpdate _ _ → newline <> indent
839+ CST.ExprSection _ → newline <> indent
840+ CST.ExprString _ _ → newline <> indent
841+ CST.ExprTyped _ _ _ → newline <> indent
842+ CST.ExprInt _ _ → newline <> indent
843+ CST.ExprError e → absurd e
844+
845+ prefix ∷ String
826846 prefix = case lines of
827− MultipleLines -> multiLine
828− SingleLine -> space
847+ MultipleLines → multiLine
848+ SingleLine → space
829849
830−formatExpr ::
831− Settings ->
832− Indent ->
833− CST.Expr Void ->
850+formatExpr ∷
851+ Settings →
852+ Indent →
853+ CST.Expr Void →
834854 String
835855formatExpr settings@{ indentation } indent'' expr'' = case expr'' of
836− CST.ExprAdo adoBlock' -> formatAdoBlock lines settings indent'' adoBlock'
837− CST.ExprApp expr1 expressions -> -- [CHECK] Verify
856+ CST.ExprAdo adoBlock' → formatAdoBlock lines settings indent'' adoBlock'
857+ CST.ExprApp expr1 expressions → -- [CHECK] Verify
838858 formatExpr settings indent'' expr1
839859 <> foldMap formatApp expressions
840860 where
841861 formatApp curr = (formatExprPrefix (singleOrMultilineBetween expr1 curr) settings indent'' curr)
842− CST.ExprArray delimited' -> do
862+ CST.ExprArray delimited' → do
843863 let
844864 indent' = case lines of
845− MultipleLines -> indent'' <> indentation
846− SingleLine -> indent''
865+ MultipleLines → indent'' <> indentation
866+ SingleLine → indent''
847867 formatArray
848868 settings
849869 lines
850870 indent''
851871 (formatExpr settings indent')
852872 delimited'
853− CST.ExprBoolean boolean _ -> formatSourceToken settings indent'' blank boolean
854− CST.ExprCase caseOf -> formatCaseOf lines settings indent'' caseOf
855− CST.ExprChar char _ -> formatSourceToken settings indent'' blank char
856− CST.ExprConstructor name -> formatQualifiedName settings indent'' blank name
857− CST.ExprDo doBlock -> formatDoBlock lines settings indent'' doBlock
858− CST.ExprHole hole -> formatName settings indent'' blank hole
859− CST.ExprIdent name -> formatQualifiedName settings indent'' blank name
860− CST.ExprIf ifThenElse -> formatIfThenElse lines settings indent'' ifThenElse
861− CST.ExprInfix expr1 expressions ->
873+ CST.ExprBoolean boolean _ → formatSourceToken settings indent'' blank boolean
874+ CST.ExprCase caseOf → formatCaseOf lines settings indent'' caseOf
875+ CST.ExprChar char _ → formatSourceToken settings indent'' blank char
876+ CST.ExprConstructor name → formatQualifiedName settings indent'' blank name
877+ CST.ExprDo doBlock → formatDoBlock lines settings indent'' doBlock
878+ CST.ExprHole hole → formatName settings indent'' blank hole
879+ CST.ExprIdent name → formatQualifiedName settings indent'' blank name
880+ CST.ExprIf ifThenElse → formatIfThenElse lines settings indent'' ifThenElse
881+ CST.ExprInfix expr1 expressions →
862882 formatExpr settings indent'' expr1
863883 <> prefix
864884 <> foldMap formatOne expressions
865885 where
866886 (indent /\ indent' /\ prefix /\ prefix') = case lines of
867− MultipleLines ->
887+ MultipleLines →
868888 ( (indent'' <> indentation <> indentation)
869889 /\ (indent'' <> indentation)
870890 /\ (newline <> indent'' <> indentation)
871891 /\ (newline <> (indent'' <> indentation) <> indentation)
872892 )
873− SingleLine -> (indent'' /\ indent'' /\ space /\ space)
893+ SingleLine → (indent'' /\ indent'' /\ space /\ space)
874894
875895 formatOne (wrapped /\ expression) =
876896 formatWrapped settings indent (formatExpr settings indent') wrapped
877897 <> prefix'
878898 <> formatExpr settings indent expression
879− CST.ExprLambda lambda -> do
899+ CST.ExprLambda lambda → do
880900 formatLambda lines settings indent'' lambda
881− CST.ExprLet letIn -> do
901+ CST.ExprLet letIn → do
882902 formatLetIn lines settings indent'' letIn
883− CST.ExprNegate negative expression -> do
903+ CST.ExprNegate negative expression → do
884904 formatSourceToken settings indent'' blank negative
885905 <> formatExpr settings indent'' expression
886− CST.ExprNumber number _ -> do
906+ CST.ExprNumber number _ → do
887907 formatSourceToken settings indent'' blank number
888− CST.ExprOp expr1 expressions -> do
908+ CST.ExprOp expr1 expressions → do
889909 let
890910 indent /\ indent' /\ prefix = case lines of
891− MultipleLines -> (indent'' <> indentation <> indentation) /\ (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
892− SingleLine -> (indent'' <> indentation) /\ indent'' /\ space
911+ MultipleLines → (indent'' <> indentation <> indentation) /\ (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
912+ SingleLine → (indent'' <> indentation) /\ indent'' /\ space
893913 formatExpr settings indent'' expr1
894914 <> foldMap
895− ( \(op /\ expr) ->
915+ ( \(op /\ expr) →
896916 formatQualifiedName settings indent' prefix op
897917 <> space
898918 <> formatExpr settings indent expr
899919 )
900920 expressions
901− CST.ExprOpName name' -> do
921+ CST.ExprOpName name' → do
902922 formatQualifiedName settings indent'' blank name'
903− CST.ExprParens wrapped' -> do
923+ CST.ExprParens wrapped' → do
904924 formatParens lines settings indent'' (formatExpr settings) wrapped'
905− CST.ExprRecord delimited -> do
925+ CST.ExprRecord delimited → do
906926 formatRecord
907927 settings
908928 indent''
@@ -912,13 +932,13 @@ formatExpr settings@{ indentation } indent'' expr'' = case expr'' of
912932 (formatExpr settings)
913933 )
914934 delimited
915− CST.ExprRecordAccessor recordAccessor' -> do
935+ CST.ExprRecordAccessor recordAccessor' → do
916936 formatRecordAccessor lines settings indent'' recordAccessor'
917− CST.ExprRecordUpdate expr' delimitedNonEmpty -> do
937+ CST.ExprRecordUpdate expr' delimitedNonEmpty → do
918938 let
919939 indent' /\ prefix = case lines of
920− MultipleLines -> (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
921− SingleLine -> indent'' /\ space
940+ MultipleLines → (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
941+ SingleLine → indent'' /\ space
922942 formatExpr settings indent'' expr'
923943 <> prefix
924944 <> formatRecordNonEmpty
@@ -926,56 +946,56 @@ formatExpr settings@{ indentation } indent'' expr'' = case expr'' of
926946 indent'
927947 (formatRecordUpdate settings indent')
928948 delimitedNonEmpty
929− CST.ExprSection section -> formatSourceToken settings indent'' blank section
930− CST.ExprString string _ -> formatSourceToken settings indent'' blank string
931− CST.ExprTyped expr' colons type'' -> do
949+ CST.ExprSection section → formatSourceToken settings indent'' blank section
950+ CST.ExprString string _ → formatSourceToken settings indent'' blank string
951+ CST.ExprTyped expr' colons type'' → do
932952 let
933953 indent' /\ prefix = case lines of
934− MultipleLines -> (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
935− SingleLine -> indent'' /\ space
954+ MultipleLines → (indent'' <> indentation) /\ (newline <> indent'' <> indentation)
955+ SingleLine → indent'' /\ space
936956 formatExpr settings indent'' expr'
937957 <> formatSourceToken settings indent'' space colons
938958 <> prefix
939959 <> formatType settings indent' lines type''
940− CST.ExprInt int _ -> formatSourceToken settings indent'' blank int
941− CST.ExprError e -> absurd e
960+ CST.ExprInt int _ → formatSourceToken settings indent'' blank int
961+ CST.ExprError e → absurd e
942962 where
943963 lines = singleOrMultiline expr''
944964
945−formatRecord ::
946− forall a.
947− Settings ->
948− Indent ->
949− (a -> String) ->
950− CST.Delimited a ->
965+formatRecord ∷
966+ ∀ a.
967+ Settings →
968+ Indent →
969+ (a → String) →
970+ CST.Delimited a →
951971 String
952972formatRecord settings indent formatValue = case _ of
953− CST.Wrapped { open, value: Nothing, close } -> do
973+ CST.Wrapped { open, value: Nothing, close } → do
954974 formatSourceToken settings indent blank open
955975 <> formatSourceToken settings indent blank close
956− CST.Wrapped { open, value: Just record', close } ->
976+ CST.Wrapped { open, value: Just record', close } →
957977 formatRecordNonEmpty
958978 settings
959979 indent
960980 formatValue
961981 (CST.Wrapped { open, value: record', close })
962982
963−formatRecordNonEmpty ::
964− forall a.
965− Settings ->
966− Indent ->
967− (a -> String) ->
968− CST.DelimitedNonEmpty a ->
983+formatRecordNonEmpty ∷
984+ ∀ a.
985+ Settings →
986+ Indent →
987+ (a → String) →
988+ CST.DelimitedNonEmpty a →
969989 String
970990formatRecordNonEmpty settings indent formatValue record' = do
971991 let
972992 (before /\ after) = case lines of
973− MultipleLines -> (blank /\ blank)
974− SingleLine -> (space /\ space)
993+ MultipleLines → (blank /\ blank)
994+ SingleLine → (space /\ space)
975995 formatWrapped
976996 settings
977997 indent
978− ( \separated' ->
998+ ( \separated' →
979999 before
9801000 <> formatSeparated settings lines indent space formatValue separated' -- [CHECK] is the lines correct
9811001 <> after
@@ -984,47 +1004,46 @@ formatRecordNonEmpty settings indent formatValue record' = do
9841004 where
9851005 lines = singleOrMultiline record'
9861006
987−formatRecordAccessor ::
988− Lines ->
989− Settings ->
990− Indent ->
991− CST.RecordAccessor Void ->
1007+formatRecordAccessor ∷
1008+ Lines →
1009+ Settings →
1010+ Indent →
1011+ CST.RecordAccessor Void →
9921012 String
9931013formatRecordAccessor lines settings@{ indentation } indent' recordAccessor' = case recordAccessor' of
994− { expr: expr', dot, path } -> do
1014+ { expr: expr', dot, path } → do
9951015 let
9961016 indentTrick = indent' <> indentation
9971017
9981018 indent /\ prefix = case lines of
999− MultipleLines -> indentTrick /\ (newline <> indentTrick)
1000− SingleLine -> indent' /\ blank
1019+ MultipleLines → indentTrick /\ (newline <> indentTrick)
1020+ SingleLine → indent' /\ blank
10011021 formatExpr settings indent expr'
10021022 <> prefix
10031023 <> formatSourceToken settings indent blank dot
10041024 <> formatSeparated
10051025 settings
1006− lines -- (lines.separated SourceRange.label path)
1026+ lines
10071027 indent
10081028 blank
10091029 (formatName settings indent' blank)
10101030 path
10111031
1012−-- [CHECK] Verify lines stuff
1013−formatRecordUpdate ::
1014− Settings ->
1015− Indent ->
1016− CST.RecordUpdate Void ->
1032+formatRecordUpdate ∷
1033+ Settings →
1034+ Indent →
1035+ CST.RecordUpdate Void →
10171036 String
10181037formatRecordUpdate settings@{ indentation } indent' recordUpdate' = case recordUpdate' of
1019− CST.RecordUpdateBranch label' delimitedNonEmpty' -> do
1038+ CST.RecordUpdateBranch label' delimitedNonEmpty' → do
10201039 let
10211040 lines = singleOrMultiline delimitedNonEmpty'
10221041
10231042 indentTrick = indent' <> indentation
10241043
10251044 indent /\ prefix = case lines of
1026− MultipleLines -> indentTrick /\ (newline <> indentTrick)
1027− SingleLine -> indent' /\ space
1045+ MultipleLines → indentTrick /\ (newline <> indentTrick)
1046+ SingleLine → indent' /\ space
10281047 formatName settings indent' blank label'
10291048 <> prefix
10301049 <> formatRecordNonEmpty
@@ -1032,57 +1051,57 @@ formatRecordUpdate settings@{ indentation } indent' recordUpdate' = case recordU
10321051 indent
10331052 (formatRecordUpdate settings indent)
10341053 delimitedNonEmpty'
1035− CST.RecordUpdateLeaf label' equals expr' -> do
1054+ CST.RecordUpdateLeaf label' equals expr' → do
10361055 let
10371056 lines = singleOrMultiline expr'
10381057
10391058 indentTrick = indent' <> indentation
10401059
10411060 indent /\ prefix = case lines of
1042− MultipleLines -> indentTrick /\ (newline <> indentTrick)
1043− SingleLine -> indent' /\ space
1061+ MultipleLines → indentTrick /\ (newline <> indentTrick)
1062+ SingleLine → indent' /\ space
10441063 formatName settings indent' blank label'
10451064 <> formatSourceToken settings indent' space equals
10461065 <> prefix
10471066 <> formatExpr settings indent expr'
10481067
1049−formatRecordLabeled ::
1050− forall a.
1051− RangeOf a =>
1052− Settings ->
1053− Indent ->
1054− (Indent -> a -> String) ->
1055− CST.RecordLabeled a ->
1068+formatRecordLabeled ∷
1069+ ∀ a.
1070+ RangeOf a ⇒
1071+ Settings →
1072+ Indent →
1073+ (Indent → a → String) →
1074+ CST.RecordLabeled a →
10561075 String
10571076formatRecordLabeled settings@{ indentation } indent' f recordLabeled' = case recordLabeled' of
1058− CST.RecordPun name' -> do
1077+ CST.RecordPun name' → do
10591078 formatName settings indent' blank name'
1060− CST.RecordField label' colon a -> do
1079+ CST.RecordField label' colon a → do
10611080 let
10621081 indent /\ prefix = case singleOrMultilineBetween label' a of
1063− MultipleLines -> (indent' <> indentation <> indentation) /\ (newline <> indent' <> indentation <> indentation)
1064− SingleLine -> indent' /\ space
1082+ MultipleLines → (indent' <> indentation <> indentation) /\ (newline <> indent' <> indentation <> indentation)
1083+ SingleLine → indent' /\ space
10651084 formatName settings indent' blank label'
10661085 <> formatSourceToken settings indent' blank colon
10671086 <> prefix
10681087 <> f indent a
10691088
1070−formatLetIn ::
1071− Lines ->
1072− Settings ->
1073− Indent ->
1074− CST.LetIn Void ->
1089+formatLetIn ∷
1090+ Lines →
1091+ Settings →
1092+ Indent →
1093+ CST.LetIn Void →
10751094 String
10761095formatLetIn lines settings@{ indentation } indent' letIn' = case letIn' of
10771096 { keyword: let'
10781097 , bindings: letBindings
10791098 , in: in'
10801099 , body: bodyExpression
1081− } -> do
1100+ } → do
10821101 let
10831102 inPrefix /\ indent /\ prefix = case lines of
1084− MultipleLines -> (newline <> indent') /\ (indent' <> indentation) /\ (newline <> indent' <> indentation)
1085− SingleLine -> space /\ indent' /\ space
1103+ MultipleLines → (newline <> indent') /\ (indent' <> indentation) /\ (newline <> indent' <> indentation)
1104+ SingleLine → space /\ indent' /\ space
10861105 formatSourceToken settings indent' blank let'
10871106 <> foldMap
10881107 (formatLetBinding settings indent prefix newline)
@@ -1093,59 +1112,59 @@ formatLetIn lines settings@{ indentation } indent' letIn' = case letIn' of
10931112 <> prefix
10941113 <> formatExpr settings indent bodyExpression
10951114
1096−formatLambda ::
1097− Lines ->
1098− Settings ->
1099− Indent ->
1100− CST.Lambda Void ->
1115+formatLambda ∷
1116+ Lines →
1117+ Settings →
1118+ Indent →
1119+ CST.Lambda Void →
11011120 String
11021121formatLambda lines settings@{ indentation } indent' lambda' = case lambda' of
1103− { symbol: reverseSolidus, binders, arrow, body: expr' } -> do
1122+ { symbol: reverseSolidus, binders, arrow, body: expr' } → do
11041123 formatSourceToken settings indent' blank reverseSolidus
1105− <> foldMap (\binder' -> formatBinder settings indent' binder' <> space) binders
1124+ <> foldMap (\binder' → formatBinder settings indent' binder' <> space) binders
11061125 <> formatSourceToken settings indent' blank arrow
11071126 <> formatExprPrefix lines settings indent' expr'
11081127
1109−formatExprPrefixElseIf ::
1110− Lines ->
1111− Settings ->
1112− Indent ->
1113− CST.Expr Void ->
1128+formatExprPrefixElseIf ∷
1129+ Lines →
1130+ Settings →
1131+ Indent →
1132+ CST.Expr Void →
11141133 String
11151134formatExprPrefixElseIf lines settings@{ indentation } indent expr' = case expr' of
1116− CST.ExprAdo _ -> formatExprPrefix lines settings indent expr'
1117− CST.ExprApp _ _ -> formatExprPrefix lines settings indent expr'
1118− CST.ExprArray _ -> formatExprPrefix lines settings indent expr'
1119− CST.ExprBoolean _ _ -> formatExprPrefix lines settings indent expr'
1120− CST.ExprCase _ -> formatExprPrefix lines settings indent expr'
1121− CST.ExprChar _ _ -> formatExprPrefix lines settings indent expr'
1122− CST.ExprConstructor _ -> formatExprPrefix lines settings indent expr'
1123− CST.ExprDo _ -> formatExprPrefix lines settings indent expr'
1124− CST.ExprHole _ -> formatExprPrefix lines settings indent expr'
1125− CST.ExprIdent _ -> formatExprPrefix lines settings indent expr'
1126− CST.ExprIf _ -> space <> formatExpr settings indent expr'
1127− CST.ExprInfix _ _ -> formatExprPrefix lines settings indent expr'
1128− CST.ExprLambda _ -> formatExprPrefix lines settings indent expr'
1129− CST.ExprLet _ -> formatExprPrefix lines settings indent expr'
1130− CST.ExprNegate _ _ -> formatExprPrefix lines settings indent expr'
1131− CST.ExprNumber _ _ -> formatExprPrefix lines settings indent expr'
1132− CST.ExprOp _ _ -> formatExprPrefix lines settings indent expr'
1133− CST.ExprOpName _ -> formatExprPrefix lines settings indent expr'
1134− CST.ExprParens _ -> formatExprPrefix lines settings indent expr'
1135− CST.ExprRecord _ -> formatExprPrefix lines settings indent expr'
1136− CST.ExprRecordAccessor _ -> formatExprPrefix lines settings indent expr'
1137− CST.ExprRecordUpdate _ _ -> formatExprPrefix lines settings indent expr'
1138− CST.ExprSection _ -> formatExprPrefix lines settings indent expr'
1139− CST.ExprString _ _ -> formatExprPrefix lines settings indent expr'
1140− CST.ExprTyped _ _ _ -> formatExprPrefix lines settings indent expr'
1141− CST.ExprInt _ _ -> formatExprPrefix lines settings indent expr'
1142− CST.ExprError e -> absurd e
1143−
1144−formatIfThenElse ::
1145− Lines ->
1146− Settings ->
1147− Indent ->
1148− CST.IfThenElse Void ->
1135+ CST.ExprAdo _ → formatExprPrefix lines settings indent expr'
1136+ CST.ExprApp _ _ → formatExprPrefix lines settings indent expr'
1137+ CST.ExprArray _ → formatExprPrefix lines settings indent expr'
1138+ CST.ExprBoolean _ _ → formatExprPrefix lines settings indent expr'
1139+ CST.ExprCase _ → formatExprPrefix lines settings indent expr'
1140+ CST.ExprChar _ _ → formatExprPrefix lines settings indent expr'
1141+ CST.ExprConstructor _ → formatExprPrefix lines settings indent expr'
1142+ CST.ExprDo _ → formatExprPrefix lines settings indent expr'
1143+ CST.ExprHole _ → formatExprPrefix lines settings indent expr'
1144+ CST.ExprIdent _ → formatExprPrefix lines settings indent expr'
1145+ CST.ExprIf _ → space <> formatExpr settings indent expr'
1146+ CST.ExprInfix _ _ → formatExprPrefix lines settings indent expr'
1147+ CST.ExprLambda _ → formatExprPrefix lines settings indent expr'
1148+ CST.ExprLet _ → formatExprPrefix lines settings indent expr'
1149+ CST.ExprNegate _ _ → formatExprPrefix lines settings indent expr'
1150+ CST.ExprNumber _ _ → formatExprPrefix lines settings indent expr'
1151+ CST.ExprOp _ _ → formatExprPrefix lines settings indent expr'
1152+ CST.ExprOpName _ → formatExprPrefix lines settings indent expr'
1153+ CST.ExprParens _ → formatExprPrefix lines settings indent expr'
1154+ CST.ExprRecord _ → formatExprPrefix lines settings indent expr'
1155+ CST.ExprRecordAccessor _ → formatExprPrefix lines settings indent expr'
1156+ CST.ExprRecordUpdate _ _ → formatExprPrefix lines settings indent expr'
1157+ CST.ExprSection _ → formatExprPrefix lines settings indent expr'
1158+ CST.ExprString _ _ → formatExprPrefix lines settings indent expr'
1159+ CST.ExprTyped _ _ _ → formatExprPrefix lines settings indent expr'
1160+ CST.ExprInt _ _ → formatExprPrefix lines settings indent expr'
1161+ CST.ExprError e → absurd e
1162+
1163+formatIfThenElse ∷
1164+ Lines →
1165+ Settings →
1166+ Indent →
1167+ CST.IfThenElse Void →
11491168 String
11501169formatIfThenElse lines settings@{ indentation } indent { keyword: if', cond, then: then', true: true', else: else', false: false' } = do
11511170 formatSourceToken settings indent blank if'
@@ -1159,44 +1178,44 @@ formatIfThenElse lines settings@{ indentation } indent { keyword: if', cond, the
11591178 <> formatExprPrefixElseIf lines settings indent false'
11601179 where
11611180 prefix = case lines of
1162− MultipleLines -> newline <> indent
1163− SingleLine -> space
1164−
1165−formatDoBlock ::
1166− Lines ->
1167− Settings ->
1168− Indent ->
1169− CST.DoBlock Void ->
1181+ MultipleLines → newline <> indent
1182+ SingleLine → space
1183+
1184+formatDoBlock ∷
1185+ Lines →
1186+ Settings →
1187+ Indent →
1188+ CST.DoBlock Void →
11701189 String
11711190formatDoBlock lines settings@{ indentation } indent' doBlock' = case doBlock' of
1172− { keyword: do', statements: doStatements } -> do
1191+ { keyword: do', statements: doStatements } → do
11731192 let
11741193 indentTrick = indent' <> indentation
11751194
11761195 indent /\ prefix = case lines of
1177− MultipleLines -> indentTrick /\ (newline <> indentTrick)
1178− SingleLine -> indent' /\ space
1196+ MultipleLines → indentTrick /\ (newline <> indentTrick)
1197+ SingleLine → indent' /\ space
11791198 formatSourceToken settings indent' blank do'
11801199 <> foldMap
1181− ( \doStatement' ->
1200+ ( \doStatement' →
11821201 prefix
11831202 <> formatDoStatement settings indent doStatement'
11841203 )
11851204 doStatements
11861205
1187−formatDoStatement ::
1188− Settings ->
1189− Indent ->
1190− CST.DoStatement Void ->
1206+formatDoStatement ∷
1207+ Settings →
1208+ Indent →
1209+ CST.DoStatement Void →
11911210 String
11921211formatDoStatement settings@{ indentation } indent' doStatement' = case doStatement' of
1193− CST.DoBind binder' arrow expr' -> do
1212+ CST.DoBind binder' arrow expr' → do
11941213 formatBinder settings indent' binder'
11951214 <> formatSourceToken settings indent' space arrow
11961215 <> formatExprPrefix (singleOrMultiline doStatement') settings indent' expr'
1197− CST.DoDiscard expr' -> do
1216+ CST.DoDiscard expr' → do
11981217 formatExpr settings indent' expr'
1199− CST.DoLet let' letBindings -> do
1218+ CST.DoLet let' letBindings → do
12001219 let
12011220 indent = indent' <> indentation
12021221 formatSourceToken settings indent' blank let'
@@ -1209,20 +1228,20 @@ formatDoStatement settings@{ indentation } indent' doStatement' = case doStateme
12091228 (newline <> indent)
12101229 blank
12111230 (NE.last letBindings)
1212− CST.DoError e -> absurd e
1231+ CST.DoError e → absurd e
12131232
1214−formatCaseOf ::
1215− Lines ->
1216− Settings ->
1217− Indent ->
1218− CST.CaseOf Void ->
1233+formatCaseOf ∷
1234+ Lines →
1235+ Settings →
1236+ Indent →
1237+ CST.CaseOf Void →
12191238 String
12201239formatCaseOf lines settings@{ indentation } indent' caseOf' = case caseOf' of
1221− { keyword: case', head, of: of', branches } -> do
1240+ { keyword: case', head, of: of', branches } → do
12221241 let
12231242 indent /\ prefix = case lines of
1224− MultipleLines -> (indent' <> indentation) /\ (newline <> indent' <> indentation)
1225− SingleLine -> indent' /\ space
1243+ MultipleLines → (indent' <> indentation) /\ (newline <> indent' <> indentation)
1244+ SingleLine → indent' /\ space
12261245 formatSourceToken settings indent' blank case'
12271246 <> space
12281247 <> formatSeparated
@@ -1235,7 +1254,7 @@ formatCaseOf lines settings@{ indentation } indent' caseOf' = case caseOf' of
12351254 <> space
12361255 <> formatSourceToken settings indent' blank of'
12371256 <> foldMap
1238− ( \(binders /\ guarded) ->
1257+ ( \(binders /\ guarded) →
12391258 prefix
12401259 <> formatSeparated
12411260 settings
@@ -1248,21 +1267,21 @@ formatCaseOf lines settings@{ indentation } indent' caseOf' = case caseOf' of
12481267 )
12491268 branches
12501269
1251−formatArray ::
1252− forall a.
1253− RangeOf a =>
1254− Settings ->
1255− Lines ->
1256− Indent ->
1257− (a -> String) ->
1258− CST.Delimited a ->
1270+formatArray ∷
1271+ ∀ a.
1272+ RangeOf a ⇒
1273+ Settings →
1274+ Lines →
1275+ Indent →
1276+ (a → String) →
1277+ CST.Delimited a →
12591278 String
12601279formatArray settings lines indent formatValue = case _ of
12611280 -- Empty array
1262− CST.Wrapped { open, value: Nothing, close } -> do
1281+ CST.Wrapped { open, value: Nothing, close } → do
12631282 formatSourceToken settings indent blank open
12641283 <> formatSourceToken settings indent blank close
1265− CST.Wrapped { open, value: Just array, close } ->
1284+ CST.Wrapped { open, value: Just array, close } →
12661285 formatArrayNonEmpty
12671286 settings
12681287 lines
@@ -1270,68 +1289,68 @@ formatArray settings lines indent formatValue = case _ of
12701289 formatValue
12711290 (CST.Wrapped { open, value: array, close })
12721291
1273−formatArrayNonEmpty ::
1274− forall a.
1275− RangeOf a =>
1276− Settings ->
1277− Lines ->
1278− Indent ->
1279− (a -> String) ->
1280− CST.DelimitedNonEmpty a ->
1292+formatArrayNonEmpty ∷
1293+ ∀ a.
1294+ RangeOf a ⇒
1295+ Settings →
1296+ Lines →
1297+ Indent →
1298+ (a → String) →
1299+ CST.DelimitedNonEmpty a →
12811300 String
12821301formatArrayNonEmpty settings lines indent formatValue = formatWrapped settings indent formatOne
12831302 where
12841303 before /\ after = case lines of
1285− MultipleLines -> blank /\ blank
1286− SingleLine -> space /\ space
1304+ MultipleLines → blank /\ blank
1305+ SingleLine → space /\ space
12871306
1288− formatOne (separated :: CST.Separated a) =
1307+ formatOne (separated ∷ CST.Separated a) =
12891308 before
12901309 <> formatSeparated settings (singleOrMultiline separated) indent space formatValue separated
12911310 <> after
12921311
1293−formatAdoBlock ::
1294− Lines ->
1295− Settings ->
1296− Indent ->
1297− CST.AdoBlock Void ->
1312+formatAdoBlock ∷
1313+ Lines →
1314+ Settings →
1315+ Indent →
1316+ CST.AdoBlock Void →
12981317 String
12991318formatAdoBlock lines settings@{ indentation } indent' { keyword, statements: doStatements, in: in', result: expr' } = do
13001319 let
13011320 { indent, prefix } = case lines of
1302− MultipleLines -> do
1321+ MultipleLines → do
13031322 let
13041323 indent = indent' <> indentation
13051324 { indent, prefix: newline <> indent }
1306− SingleLine -> { indent: indent', prefix: space }
1325+ SingleLine → { indent: indent', prefix: space }
13071326 formatSourceToken settings indent' blank keyword
13081327 <> foldMap
1309− (\doStatement' -> prefix <> formatDoStatement settings indent doStatement')
1328+ (\doStatement' → prefix <> formatDoStatement settings indent doStatement')
13101329 doStatements
13111330 <> prefix
13121331 <> formatSourceToken settings indent' blank in'
13131332 <> space
13141333 <> formatExpr settings indent expr'
13151334
1316−formatLabeledNameType ::
1317− forall a.
1318− Settings ->
1319− Indent ->
1320− CST.Labeled (CST.Name a) (CST.Type Void) ->
1335+formatLabeledNameType ∷
1336+ ∀ a.
1337+ Settings →
1338+ Indent →
1339+ CST.Labeled (CST.Name a) (CST.Type Void) →
13211340 String
13221341formatLabeledNameType settings indent labeled =
13231342 formatLabeled
13241343 settings
13251344 indent
13261345 (formatName settings indent blank)
1327− (\x -> formatType settings x (singleOrMultiline labeled))
1346+ (\x → formatType settings x (singleOrMultiline labeled))
13281347 labeled
13291348
1330−formatClassHead ::
1331− Lines ->
1332− Settings ->
1333− Indent ->
1334− CST.ClassHead Void ->
1349+formatClassHead ∷
1350+ Lines →
1351+ Settings →
1352+ Indent →
1353+ CST.ClassHead Void →
13351354 String
13361355formatClassHead lines settings@{ indentation } indent { keyword, super, name, vars, fundeps } = do
13371356 formatSourceToken settings indented blank keyword
@@ -1341,11 +1360,11 @@ formatClassHead lines settings@{ indentation } indent { keyword, super, name, va
13411360 <> foldMap formatFunctionalDependency fundeps
13421361 where
13431362 { indented, prefix } = case lines of
1344− MultipleLines -> do
1363+ MultipleLines → do
13451364 let
13461365 indented = indent <> indentation
13471366 { indented, prefix: newline <> indented }
1348− SingleLine -> { indented: indent, prefix: space }
1367+ SingleLine → { indented: indent, prefix: space }
13491368
13501369 formatTypeVariableBinding binding = space <> formatTypeVarBinding settings indent binding
13511370
@@ -1370,48 +1389,48 @@ formatClassHead lines settings@{ indentation } indent { keyword, super, name, va
13701389 constraints
13711390 <> formatSourceToken settings indent space arrow
13721391
1373−formatClassFundep ::
1374− Settings ->
1375− Indent ->
1376− CST.ClassFundep ->
1392+formatClassFundep ∷
1393+ Settings →
1394+ Indent →
1395+ CST.ClassFundep →
13771396 String
13781397formatClassFundep settings indent = case _ of
1379− CST.FundepDetermined arrow names ->
1398+ CST.FundepDetermined arrow names →
13801399 formatSourceToken settings indent blank arrow
13811400 <> foldMap (formatName settings indent space) names
1382− CST.FundepDetermines names arrow moreNames -> do
1383− foldMap (\name -> formatName settings indent blank name <> space) names
1401+ CST.FundepDetermines names arrow moreNames → do
1402+ foldMap (\name → formatName settings indent blank name <> space) names
13841403 <> formatSourceToken settings indent blank arrow
13851404 <> foldMap (formatName settings indent space) moreNames
13861405
1387−formatOneOrDelimited ::
1388− forall a.
1389− RangeOf a =>
1390− Settings ->
1391− Lines ->
1392− Indent ->
1393− (a -> String) ->
1394− CST.OneOrDelimited a ->
1406+formatOneOrDelimited ∷
1407+ ∀ a.
1408+ RangeOf a ⇒
1409+ Settings →
1410+ Lines →
1411+ Indent →
1412+ (a → String) →
1413+ CST.OneOrDelimited a →
13951414 String
13961415formatOneOrDelimited settings lines indent formatValue oneOrDelimited = case oneOrDelimited of
1397− CST.One a -> formatValue a
1398− CST.Many delimitedNonEmpty -> formatDelimitedNonEmpty settings lines indent formatValue delimitedNonEmpty
1399−
1400−formatDelimitedNonEmpty ::
1401− forall a.
1402− RangeOf a =>
1403− Settings ->
1404− Lines ->
1405− Indent ->
1406− (a -> String) ->
1407− CST.DelimitedNonEmpty a ->
1416+ CST.One a → formatValue a
1417+ CST.Many delimitedNonEmpty → formatDelimitedNonEmpty settings lines indent formatValue delimitedNonEmpty
1418+
1419+formatDelimitedNonEmpty ∷
1420+ ∀ a.
1421+ RangeOf a ⇒
1422+ Settings →
1423+ Lines →
1424+ Indent →
1425+ (a → String) →
1426+ CST.DelimitedNonEmpty a →
14081427 String
14091428formatDelimitedNonEmpty settings lines indent formatValue = formatWrapped settings indent (formatSeparated settings lines indent space formatValue)
14101429
1411−formatDataConstructor ::
1412− Settings ->
1413− Indent ->
1414− CST.DataCtor Void ->
1430+formatDataConstructor ∷
1431+ Settings →
1432+ Indent →
1433+ CST.DataCtor Void →
14151434 String
14161435formatDataConstructor settings@{ indentation } indent constructor@(CST.DataCtor { name, fields }) =
14171436 space
@@ -1421,48 +1440,48 @@ formatDataConstructor settings@{ indentation } indent constructor@(CST.DataCtor
14211440 lines = singleOrMultiline constructor
14221441
14231442 { indented, prefix } = case lines of
1424− MultipleLines -> do
1443+ MultipleLines → do
14251444 let
14261445 indented = indent <> indentation
14271446 { indented, prefix: newline <> indented }
1428− SingleLine ->
1447+ SingleLine →
14291448 { indented: indent
1430− , prefix: space
1449+ , prefix: space
14311450 }
14321451
14331452 formatField typo = prefix <> formatType settings indented lines typo
14341453
14351454-- | Formats the `data Maybe a` part of `data Maybe a = Just a | Nothing`
1436−formatDataHead :: Settings -> Indent -> CST.DataHead Void -> String
1455+formatDataHead ∷ Settings → Indent → CST.DataHead Void → String
14371456formatDataHead settings indent { keyword, name, vars } =
14381457 formatSourceToken settings indent blank keyword
14391458 <> formatName settings indent space name
14401459 <> formatTypeVarBindings settings indent vars
14411460
1442−formatTypeVarBindings ::
1443− Settings ->
1444− Indent ->
1445− Array (CST.TypeVarBinding Void) ->
1461+formatTypeVarBindings ∷
1462+ Settings →
1463+ Indent →
1464+ Array (CST.TypeVarBinding Void) →
14461465 String
14471466formatTypeVarBindings settings indent = foldMap (pure space <> formatTypeVarBinding settings indent)
14481467
1449−formatTypeVarBinding ::
1450− Settings ->
1451− Indent ->
1452− CST.TypeVarBinding Void ->
1468+formatTypeVarBinding ∷
1469+ Settings →
1470+ Indent →
1471+ CST.TypeVarBinding Void →
14531472 String
14541473formatTypeVarBinding settings indent = case _ of
1455− CST.TypeVarName name -> formatName settings indent blank name
1456− CST.TypeVarKinded wrapped -> formatWrapped settings indent (formatLabeledName settings indent) wrapped
1457−
1458−formatType ::
1459− Settings ->
1460− Indent ->
1461− Lines ->
1462− CST.Type Void ->
1474+ CST.TypeVarName name → formatName settings indent blank name
1475+ CST.TypeVarKinded wrapped → formatWrapped settings indent (formatLabeledName settings indent) wrapped
1476+
1477+formatType ∷
1478+ Settings →
1479+ Indent →
1480+ Lines →
1481+ CST.Type Void →
14631482 String
14641483formatType settings@{ indentation } indent lines t = case t of
1465− CST.TypeApp typo types ->
1484+ CST.TypeApp typo types →
14661485 formatType settings indent (singleOrMultiline typo) typo
14671486 <> foldMap formatTypeWithPredecessor
14681487 (Array.zip typesArray (typo Array.: typesArray))
@@ -1472,9 +1491,9 @@ formatType settings@{ indentation } indent lines t = case t of
14721491 formatTypeWithPredecessor (curr /\ pred) = prefix <> formatType settings indented (singleOrMultiline curr) curr
14731492 where
14741493 { indented, prefix } = case singleOrMultilineBetween curr pred of
1475− MultipleLines -> { indented: indent <> indentation, prefix: newline <> indent <> indentation }
1476− SingleLine -> { indented: indent, prefix: space }
1477− CST.TypeArrow t1 arrow t2 ->
1494+ MultipleLines → { indented: indent <> indentation, prefix: newline <> indent <> indentation }
1495+ SingleLine → { indented: indent, prefix: space }
1496+ CST.TypeArrow t1 arrow t2 →
14781497 formatType settings indent (singleOrMultiline t1) t1
14791498 <> space
14801499 <> formatSourceToken settings indent blank arrow
@@ -1482,17 +1501,17 @@ formatType settings@{ indentation } indent lines t = case t of
14821501 <> formatType settings indent (singleOrMultiline t2) t2
14831502 where
14841503 prefix = case lines of
1485− MultipleLines -> newline <> indent
1486− SingleLine -> space
1487− CST.TypeArrowName arrowName -> formatSourceToken settings indent blank arrowName
1488− CST.TypeVar name -> formatName settings indent blank name
1489− CST.TypeConstructor qualifiedName -> formatQualifiedName settings indent blank qualifiedName
1490− CST.TypeWildcard wildcard -> formatSourceToken settings indent blank wildcard
1491− CST.TypeHole name -> formatName settings indent blank name
1492− CST.TypeString typeString _ -> formatSourceToken settings indent blank typeString
1493− CST.TypeRow wrappedRow -> formatWrappedRow settings indent wrappedRow
1494− CST.TypeRecord wrappedRow -> formatWrappedRow settings indent wrappedRow
1495− CST.TypeForall forAll typeVarBindings dot tailType ->
1504+ MultipleLines → newline <> indent
1505+ SingleLine → space
1506+ CST.TypeArrowName arrowName → formatSourceToken settings indent blank arrowName
1507+ CST.TypeVar name → formatName settings indent blank name
1508+ CST.TypeConstructor qualifiedName → formatQualifiedName settings indent blank qualifiedName
1509+ CST.TypeWildcard wildcard → formatSourceToken settings indent blank wildcard
1510+ CST.TypeHole name → formatName settings indent blank name
1511+ CST.TypeString typeString _ → formatSourceToken settings indent blank typeString
1512+ CST.TypeRow wrappedRow → formatWrappedRow settings indent wrappedRow
1513+ CST.TypeRecord wrappedRow → formatWrappedRow settings indent wrappedRow
1514+ CST.TypeForall forAll typeVarBindings dot tailType →
14961515 formatSourceToken settings indent blank forAll
14971516 <> formatTypeVarBindings settings indent (NE.toArray typeVarBindings)
14981517 <> formatSourceToken settings indent blank dot
@@ -1500,9 +1519,9 @@ formatType settings@{ indentation } indent lines t = case t of
15001519 <> formatType settings indent lines tailType
15011520 where
15021521 prefix = case lines of
1503− MultipleLines -> newline <> indent
1504− SingleLine -> space
1505− CST.TypeKinded typo colons kind ->
1522+ MultipleLines → newline <> indent
1523+ SingleLine → space
1524+ CST.TypeKinded typo colons kind →
15061525 formatType settings indent lines typo
15071526 <> space
15081527 <> formatSourceToken settings indent blank colons
@@ -1510,9 +1529,9 @@ formatType settings@{ indentation } indent lines t = case t of
15101529 <> formatType settings indented lines kind
15111530 where
15121531 { indented, prefix } = case lines of
1513− MultipleLines -> { indented: indent <> indentation, prefix: newline <> indent }
1514− SingleLine -> { indented: indent, prefix: space }
1515− CST.TypeOp typo types ->
1532+ MultipleLines → { indented: indent <> indentation, prefix: newline <> indent }
1533+ SingleLine → { indented: indent, prefix: space }
1534+ CST.TypeOp typo types →
15161535 formatType settings indent (singleOrMultiline typo) typo
15171536 <> foldMap formatOp types -- [TODO] Verify
15181537 where
@@ -1522,10 +1541,10 @@ formatType settings@{ indentation } indent lines t = case t of
15221541 <> formatType settings indented (singleOrMultiline anotherType) anotherType
15231542 where
15241543 { indented, prefix } = case lines of
1525− MultipleLines -> { indented: indent <> indentation, prefix: newline <> indent }
1526− SingleLine -> { indented: indent, prefix: space }
1527− CST.TypeOpName op -> formatQualifiedName settings indent blank op
1528− CST.TypeConstrained constraint arrow typo ->
1544+ MultipleLines → { indented: indent <> indentation, prefix: newline <> indent }
1545+ SingleLine → { indented: indent, prefix: space }
1546+ CST.TypeOpName op → formatQualifiedName settings indent blank op
1547+ CST.TypeConstrained constraint arrow typo →
15291548 formatType settings indent lines constraint
15301549 <> space
15311550 <> formatSourceToken settings indent blank arrow
@@ -1533,33 +1552,33 @@ formatType settings@{ indentation } indent lines t = case t of
15331552 <> formatType settings indent lines typo
15341553 where
15351554 prefix = case lines of
1536− MultipleLines -> newline <> indent
1537− SingleLine -> space
1538− CST.TypeParens wrapped ->
1555+ MultipleLines → newline <> indent
1556+ SingleLine → space
1557+ CST.TypeParens wrapped →
15391558 formatParens lines settings indent
1540− ( \x wrappedType ->
1559+ ( \x wrappedType →
15411560 formatType settings x (singleOrMultiline wrappedType) wrappedType
15421561 )
15431562 wrapped
1544− CST.TypeUnaryRow sourceToken typo ->
1563+ CST.TypeUnaryRow sourceToken typo →
15451564 formatSourceToken settings indent blank sourceToken
15461565 <> prefix
15471566 <> formatType settings indent lines typo
15481567 where
15491568 prefix = case lines of
1550− MultipleLines -> newline <> indent
1551− SingleLine -> space
1552− CST.TypeError e -> absurd e
1553−
1554−formatLabeled ::
1555− forall a b.
1556− RangeOf a =>
1557− RangeOf b =>
1558− Settings ->
1559− Indent ->
1560− (a -> String) ->
1561− (Indent -> b -> String) ->
1562− CST.Labeled a b ->
1569+ MultipleLines → newline <> indent
1570+ SingleLine → space
1571+ CST.TypeError e → absurd e
1572+
1573+formatLabeled ∷
1574+ ∀ a b.
1575+ RangeOf a ⇒
1576+ RangeOf b ⇒
1577+ Settings →
1578+ Indent →
1579+ (a → String) →
1580+ (Indent → b → String) →
1581+ CST.Labeled a b →
15631582 String
15641583formatLabeled settings@{ indentation } indent' formatLabel formatValue labeled@(CST.Labeled { label, separator, value }) =
15651584 formatLabel label
@@ -1568,61 +1587,61 @@ formatLabeled settings@{ indentation } indent' formatLabel formatValue labeled@(
15681587 <> formatValue indent value
15691588 where
15701589 { indent, prefix } = case singleOrMultiline labeled of
1571− MultipleLines -> do
1590+ MultipleLines → do
15721591 { indent: indent' <> indentation
15731592 , prefix: newline <> indent' <> indentation
15741593 }
1575− SingleLine -> { indent: indent', prefix: space }
1576−
1577−formatLabeledName ::
1578− forall n.
1579− RangeOf (CST.Name n) =>
1580− Settings ->
1581− Indent ->
1582− CST.Labeled (CST.Name n) (CST.Type Void) ->
1594+ SingleLine → { indent: indent', prefix: space }
1595+
1596+formatLabeledName ∷
1597+ ∀ n.
1598+ RangeOf (CST.Name n) ⇒
1599+ Settings →
1600+ Indent →
1601+ CST.Labeled (CST.Name n) (CST.Type Void) →
15831602 String
15841603formatLabeledName settings@{ indentation } indent labeledName =
15851604 formatLabeled
15861605 settings
15871606 indent
15881607 (formatName settings indent blank)
1589− (\x -> formatType settings x (singleOrMultiline labeledName))
1608+ (\x → formatType settings x (singleOrMultiline labeledName))
15901609 labeledName
15911610
1592−formatParens ::
1593− forall a.
1594− Lines ->
1595− Settings ->
1596− Indent ->
1597− (Indent -> a -> String) ->
1598− CST.Wrapped a ->
1611+formatParens ∷
1612+ ∀ a.
1613+ Lines →
1614+ Settings →
1615+ Indent →
1616+ (Indent → a → String) →
1617+ CST.Wrapped a →
15991618 String
16001619formatParens lines settings@{ indentation } indent formatValue wrapped = do
16011620 formatWrapped settings indent (formatValue indented) wrapped
16021621 where
16031622 indented = case lines of
1604− MultipleLines -> indent <> indentation
1605− SingleLine -> indent
1606−
1607−formatRow ::
1608− Lines ->
1609− Settings ->
1610− Indent ->
1611− CST.Row Void ->
1623+ MultipleLines → indent <> indentation
1624+ SingleLine → indent
1625+
1626+formatRow ∷
1627+ Lines →
1628+ Settings →
1629+ Indent →
1630+ CST.Row Void →
16121631 String
16131632formatRow lines settings@{ indentation } indent (CST.Row { labels, tail }) = case labels, tail of
1614− Nothing, Nothing -> blank
1615− Just ls, Nothing ->
1633+ Nothing, Nothing → blank
1634+ Just ls, Nothing →
16161635 before
16171636 <> formatSeparated settings lines indent space f ls
16181637 <> after
16191638 where
16201639 { before, indented, after } = case lines of
1621− MultipleLines -> { before: blank, indented: indent <> indentation, after: blank }
1622− SingleLine -> { before: space, indented: indent, after: space }
1640+ MultipleLines → { before: blank, indented: indent <> indentation, after: blank }
1641+ SingleLine → { before: space, indented: indent, after: space }
16231642
16241643 f = formatLabeledName settings indented
1625− Nothing, Just (bar /\ tailType) -> do
1644+ Nothing, Just (bar /\ tailType) → do
16261645 before
16271646 <> formatSourceToken settings indent blank bar
16281647 <> space
@@ -1630,9 +1649,9 @@ formatRow lines settings@{ indentation } indent (CST.Row { labels, tail }) = cas
16301649 <> after
16311650 where
16321651 { before, after } = case lines of
1633− MultipleLines -> { before: newline <> indent, after: blank }
1634− SingleLine -> { before: space, after: space }
1635− Just ls, Just (bar /\ tailType) -> do
1652+ MultipleLines → { before: newline <> indent, after: blank }
1653+ SingleLine → { before: space, after: space }
1654+ Just ls, Just (bar /\ tailType) → do
16361655 before
16371656 <> formatSeparated settings lines indent space f ls
16381657 <> prefix
@@ -1642,45 +1661,44 @@ formatRow lines settings@{ indentation } indent (CST.Row { labels, tail }) = cas
16421661 <> after
16431662 where
16441663 { before, indented, after, prefix } = case lines of
1645− MultipleLines -> { before: blank, indented: indent <> indentation, after: blank, prefix: newline <> indent }
1646− SingleLine -> { before: space, indented: indent, after: space, prefix: space }
1664+ MultipleLines → { before: blank, indented: indent <> indentation, after: blank, prefix: newline <> indent }
1665+ SingleLine → { before: space, indented: indent, after: space, prefix: space }
16471666
16481667 f = formatLabeledName settings indented
16491668
1650−formatSeparated ::
1651− forall a.
1652− Settings ->
1653− Lines ->
1654− Indent ->
1655− Prefix ->
1656− (a -> String) ->
1657− CST.Separated a ->
1669+formatSeparated ∷
1670+ ∀ a.
1671+ Settings →
1672+ Lines →
1673+ Indent →
1674+ Prefix →
1675+ (a → String) →
1676+ CST.Separated a →
16581677 String
16591678formatSeparated settings lines indent prefix' formatValue (CST.Separated { head, tail }) = formatValue head <> foldMap go tail
16601679 where
16611680 prefix = case lines of
1662− MultipleLines -> newline <> indent
1663− SingleLine -> blank
1681+ MultipleLines → newline <> indent
1682+ SingleLine → blank
16641683
1665− go :: CST.SourceToken /\ a -> String
1684+ go ∷ CST.SourceToken /\ a → String
16661685 go (separator /\ value) =
16671686 prefix
16681687 <> formatSourceToken settings indent blank separator
16691688 <> prefix'
16701689 <> formatValue value
16711690
1672−formatName :: forall a. Settings -> Indent -> Prefix -> CST.Name a -> String
1673−formatName settings indent prefix (CST.Name { token }) =
1674− formatSourceToken settings indent prefix token
1691+formatName ∷ ∀ a. Settings → Indent → Prefix → CST.Name a → String
1692+formatName settings indent prefix (CST.Name { token }) = formatSourceToken settings indent prefix token
16751693
1676−formatQualifiedName :: forall a. Settings -> Indent -> Prefix -> CST.QualifiedName a -> String
1694+formatQualifiedName ∷ ∀ a. Settings → Indent → Prefix → CST.QualifiedName a → String
16771695formatQualifiedName settings indent prefix (CST.QualifiedName { token }) = formatSourceToken settings indent prefix token
16781696
1679−formatSourceToken ::
1680− Settings ->
1681− Indent ->
1682− Prefix ->
1683− CST.SourceToken ->
1697+formatSourceToken ∷
1698+ Settings →
1699+ Indent →
1700+ Prefix →
1701+ CST.SourceToken →
16841702 String
16851703formatSourceToken settings indent prefix { leadingComments, trailingComments, value } =
16861704 formatCommentsLeading indent prefix leadingComments
@@ -1688,95 +1706,89 @@ formatSourceToken settings indent prefix { leadingComments, trailingComments, va
16881706 <> print value
16891707 <> formatCommentsTrailing prefix trailingComments
16901708 where
1691− print = case settings.sourceStyle of
1692− Nothing -> Print.printToken
1693− Just style -> printWithStyle style
1694− printWithStyle style v = case v of
1695− CST.TokLeftArrow _ ->
1696− case style of
1697− CST.ASCII -> "<-"
1698− CST.Unicode -> "←"
1699− CST.TokRightArrow _ ->
1700− case style of
1701− CST.ASCII -> "->"
1702− CST.Unicode -> "→"
1703− CST.TokRightFatArrow _ ->
1704− case style of
1705− CST.ASCII -> "=>"
1706− CST.Unicode -> "⇒"
1707− CST.TokDoubleColon _ ->
1708− case style of
1709− CST.ASCII -> "::"
1710− CST.Unicode -> "∷"
1711− CST.TokForall _ ->
1712− case style of
1713− CST.ASCII -> "forall"
1714− CST.Unicode -> "∀"
1715− CST.TokSymbolArrow _ ->
1716− case style of
1717− CST.ASCII -> "(->)"
1718− CST.Unicode -> "(→)"
1719− _ -> Print.printToken v
1720−
1721−formatCommentLeading ::
1722− Indent ->
1723− Prefix ->
1724− CST.Comment CST.LineFeed ->
1709+ print = case settings.sourceStyle of
1710+ Nothing → Print.printToken
1711+ Just style → printWithStyle style
1712+ printWithStyle style v = case v of
1713+ CST.TokLeftArrow _ → case style of
1714+ CST.ASCII → "<-"
1715+ CST.Unicode → "←"
1716+ CST.TokRightArrow _ → case style of
1717+ CST.ASCII → "->"
1718+ CST.Unicode → "→"
1719+ CST.TokRightFatArrow _ → case style of
1720+ CST.ASCII → "=>"
1721+ CST.Unicode → "⇒"
1722+ CST.TokDoubleColon _ → case style of
1723+ CST.ASCII → "::"
1724+ CST.Unicode → "∷"
1725+ CST.TokForall _ → case style of
1726+ CST.ASCII → "forall"
1727+ CST.Unicode → "∀"
1728+ CST.TokSymbolArrow _ → case style of
1729+ CST.ASCII → "(->)"
1730+ CST.Unicode → "(→)"
1731+ _ → Print.printToken v
1732+
1733+formatCommentLeading ∷
1734+ Indent →
1735+ Prefix →
1736+ CST.Comment CST.LineFeed →
17251737 String
17261738formatCommentLeading indent prefix = case _ of
1727− CST.Comment comment -> do
1739+ CST.Comment comment → do
17281740 prefix <> comment <> newline <> indent
1729− CST.Line _ _ -> blank
1730− CST.Space _ -> blank
1741+ CST.Line _ _ → blank
1742+ CST.Space _ → blank
17311743
1732−formatCommentTrailing ::
1733− Prefix ->
1734− CST.Comment Void ->
1744+formatCommentTrailing ∷
1745+ Prefix →
1746+ CST.Comment Void →
17351747 String
17361748formatCommentTrailing prefix comment'' = case comment'' of
1737− CST.Comment comment' -> prefix <> space <> comment'
1738− CST.Line _ _ -> blank
1739− CST.Space _ -> blank
1740−
1741−formatCommentsLeading ::
1742− Indent ->
1743− Prefix ->
1744− Array (CST.Comment CST.LineFeed) ->
1749+ CST.Comment comment' → prefix <> space <> comment'
1750+ CST.Line _ _ → blank
1751+ CST.Space _ → blank
1752+
1753+formatCommentsLeading ∷
1754+ Indent →
1755+ Prefix →
1756+ Array (CST.Comment CST.LineFeed) →
17451757 String
17461758formatCommentsLeading indent prefix commentsLeading' = case commentsLeading' of
1747− [] -> blank
1748− _ -> foldMap (formatCommentLeading indent prefix) commentsLeading'
1759+ [] → blank
1760+ _ → foldMap (formatCommentLeading indent prefix) commentsLeading'
17491761
1750−formatCommentsTrailing ::
1751− Prefix ->
1752− Array (CST.Comment Void) ->
1762+formatCommentsTrailing ∷
1763+ Prefix →
1764+ Array (CST.Comment Void) →
17531765 String
17541766formatCommentsTrailing prefix commentsTrailing' = case commentsTrailing' of
1755− [] -> blank
1756− _ -> foldMap (formatCommentTrailing prefix) commentsTrailing'
1767+ [] → blank
1768+ _ → foldMap (formatCommentTrailing prefix) commentsTrailing'
17571769
1758−formatCommentsTrailingModule ::
1759− Array (CST.Comment CST.LineFeed) ->
1770+formatCommentsTrailingModule ∷
1771+ Array (CST.Comment CST.LineFeed) →
17601772 String
17611773formatCommentsTrailingModule commentsTrailing' = do
17621774 let
17631775 comments = map formatComment commentsTrailing'
17641776 case NE.fromArray (Array.catMaybes comments) of
1765− Nothing -> blank
1766− Just comments -> newline <> fold (NE.intersperse newline comments) <> newline
1777+ Nothing → blank
1778+ Just comments → newline <> fold (NE.intersperse newline comments) <> newline
17671779
1768−formatComment :: forall lf. CST.Comment lf -> Maybe String
1780+formatComment ∷ ∀ lf. CST.Comment lf → Maybe String
17691781formatComment = case _ of
1770− CST.Comment comment -> Just comment
1771− CST.Space _ -> Nothing
1772− CST.Line _ _ -> Nothing
1773−
1774−formatWrapped ::
1775− forall a.
1776− Settings ->
1777− Indent ->
1778− (a -> String) ->
1779− CST.Wrapped a ->
1782+ CST.Comment comment → Just comment
1783+ CST.Space _ → Nothing
1784+ CST.Line _ _ → Nothing
1785+
1786+formatWrapped ∷
1787+ ∀ a.
1788+ Settings →
1789+ Indent →
1790+ (a → String) →
1791+ CST.Wrapped a →
17801792 String
17811793formatWrapped settings indent formatValue wrapped@(CST.Wrapped { open, value, close }) =
17821794 formatSourceToken settings indent blank open
@@ -1786,13 +1798,13 @@ formatWrapped settings indent formatValue wrapped@(CST.Wrapped { open, value, cl
17861798 <> formatSourceToken settings indent blank close
17871799 where
17881800 { before, after } = case singleOrMultiline wrapped of
1789− MultipleLines -> { before: space, after: newline <> indent }
1790− SingleLine -> { before: blank, after: blank }
1801+ MultipleLines → { before: space, after: newline <> indent }
1802+ SingleLine → { before: blank, after: blank }
17911803
1792−formatWrappedRow ::
1793− Settings ->
1794− Indent ->
1795− CST.Wrapped (CST.Row Void) ->
1804+formatWrappedRow ∷
1805+ Settings →
1806+ Indent →
1807+ CST.Wrapped (CST.Row Void) →
17961808 String
17971809formatWrappedRow settings@{ indentation } indent wrapped@(CST.Wrapped { open, value: row, close }) =
17981810 formatSourceToken settings indent blank open
@@ -1804,9 +1816,9 @@ formatWrappedRow settings@{ indentation } indent wrapped@(CST.Wrapped { open, va
18041816 lines = singleOrMultiline wrapped
18051817
18061818 before /\ after = case row, lines of
1807− CST.Row { labels: Just _ }, MultipleLines -> space /\ (newline <> indent)
1808− CST.Row { labels: Nothing }, MultipleLines -> blank /\ (newline <> indent)
1809− _, SingleLine -> blank /\ blank
1819+ CST.Row { labels: Just _ }, MultipleLines → space /\ (newline <> indent)
1820+ CST.Row { labels: Nothing }, MultipleLines → blank /\ (newline <> indent)
1821+ _, SingleLine → blank /\ blank
18101822
18111823type Indentation
18121824 = String -- [TODO] Use Numbers
@@ -1820,12 +1832,11 @@ type Prefix
18201832type Suffix
18211833 = String
18221834
1823−newline :: String
1835+newline ∷ String
18241836newline = "\n"
18251837
1826−blank :: String
1838+blank ∷ String
18271839blank = ""
18281840
1829−space :: String
1841+space ∷ String
18301842space = " "
1831−