@@ -282,12 +282,11 @@ merge a b =
282linesMap :: (a -> (Lines, b)) -> [a] -> (Bool, [b])
282linesMap :: (a -> (Lines, b)) -> [a] -> (Bool, [b])
283linesMap func xs =
283linesMap func xs =
286− map func xs
285+ pairs = map func xs
288− ( any ((==) Many . fst) pairs
287+ ( any ((==) Many . fst) pairs
289− , map snd pairs
288+ , map snd pairs
293data Grouping = Atomic | Whatever
292data Grouping = Atomic | Whatever
@@ -327,35 +326,29 @@ fromExpr indent grouping expression =
327 Array exprs ->
326 Array exprs ->
328 (,) Many $
327 (,) Many $
330− (anyMany, builders) =
331− linesMap (fromExpr indent Whatever) exprs
329+ (anyMany, builders) = linesMap (fromExpr indent Whatever) exprs
333− if anyMany then
331+ if anyMany then
335− <> deeper indent
333+ <> deeper indent
336− <> commaNewlineSep indent builders
334+ <> commaNewlineSep indent builders
337− <> "\n" <> indent <> "]"
335+ <> "\n" <> indent <> "]"
340− "[" <> commaSep builders <> "]"
337+ "[" <> commaSep builders <> "]"
342 Object fields ->
339 Object fields ->
343 (,) Many $
340 (,) Many $
345− deeperIndent =
342+ deeperIndent = deeper indent
348− (anyMany, builders) =
349− linesMap (fromField deeperIndent) fields
343+ (anyMany, builders) = linesMap (fromField deeperIndent) fields
351− if anyMany then
345+ if anyMany then
353− <> deeperIndent
347+ <> deeperIndent
354− <> commaNewlineSep indent builders
348+ <> commaNewlineSep indent builders
355− <> "\n" <> indent <> "}"
349+ <> "\n" <> indent <> "}"
358− "{" <> commaSep builders <> "}"
351+ "{" <> commaSep builders <> "}"
360 Ref name ->
353 Ref name ->
361 (One, Name.toBuilder name)
354 (One, Name.toBuilder name)
@@ -368,24 +361,20 @@ fromExpr indent grouping expression =
369 Prefix op expr ->
362 Prefix op expr ->
372− fromExpr indent Atomic expr
364+ (lines, builder) = fromExpr indent Atomic expr
375− , parensFor grouping (fromPrefix op <> builder)
367+ , parensFor grouping (fromPrefix op <> builder)
378 Infix op leftExpr rightExpr ->
370 Infix op leftExpr rightExpr ->
381− fromExpr indent Atomic leftExpr
372+ (leftLines , left ) = fromExpr indent Atomic leftExpr
383− (rightLines, right) =
384− fromExpr indent Atomic rightExpr
373+ (rightLines, right) = fromExpr indent Atomic rightExpr
386− ( merge leftLines rightLines
375+ ( merge leftLines rightLines
387− , parensFor grouping (left <> fromInfix op <> right)
376+ , parensFor grouping (left <> fromInfix op <> right)
390 If condExpr thenExpr elseExpr ->
379 If condExpr thenExpr elseExpr ->
@@ -393,39 +382,30 @@ fromExpr indent grouping expression =
393 thenB = snd (fromExpr indent Atomic thenExpr)
382 thenB = snd (fromExpr indent Atomic thenExpr)
394 elseB = snd (fromExpr indent Atomic elseExpr)
383 elseB = snd (fromExpr indent Atomic elseExpr)
397− , parensFor grouping (condB <> " ? " <> thenB <> " : " <> elseB)
386+ , parensFor grouping (condB <> " ? " <> thenB <> " : " <> elseB)
400 Assign lValue expr ->
389 Assign lValue expr ->
403− fromLValue indent lValue
391+ (leftLines , left ) = fromLValue indent lValue
405− (rightLines, right) =
406− fromExpr indent Whatever expr
392+ (rightLines, right) = fromExpr indent Whatever expr
408− ( merge leftLines rightLines
394+ ( merge leftLines rightLines
409− , parensFor grouping (left <> " = " <> right)
395+ , parensFor grouping (left <> " = " <> right)
412 Call function args ->
398 Call function args ->
413 (,) Many $
399 (,) Many $
415− deeperIndent =
401+ deeperIndent = deeper indent
419− snd (fromExpr indent Atomic function)
402+ funcB = snd (fromExpr indent Atomic function)
422− linesMap (fromExpr deeperIndent Whatever) args
403+ (anyMany, argsB) = linesMap (fromExpr deeperIndent Whatever) args
424− if anyMany then
405+ if anyMany then
425− funcB <> "(\n" <> deeperIndent <> commaNewlineSep indent argsB <> ")"
406+ funcB <> "(\n" <> deeperIndent <> commaNewlineSep indent argsB <> ")"
428− funcB <> "(" <> commaSep argsB <> ")"
408+ funcB <> "(" <> commaSep argsB <> ")"
430 Function maybeName args stmts ->
410 Function maybeName args stmts ->
431 (,) Many $
411 (,) Many $
@@ -443,12 +423,11 @@ fromExpr indent grouping expression =
443fromField :: Builder -> (Name, Expr) -> (Lines, Builder)
423fromField :: Builder -> (Name, Expr) -> (Lines, Builder)
444fromField indent (field, expr) =
424fromField indent (field, expr) =
447− fromExpr indent Whatever expr
426+ (lines, builder) = fromExpr indent Whatever expr
450− , Name.toBuilder field <> ": " <> builder
429+ , Name.toBuilder field <> ": " <> builder
@@ -471,24 +450,20 @@ fromLValue indent lValue =
471makeDot :: Builder -> Expr -> Name -> (Lines, Builder)
450makeDot :: Builder -> Expr -> Name -> (Lines, Builder)
472makeDot indent expr field =
451makeDot indent expr field =
475− fromExpr indent Atomic expr
453+ (lines, builder) = fromExpr indent Atomic expr
477− (lines, builder <> "." <> Name.toBuilder field)
455+ (lines, builder <> "." <> Name.toBuilder field)
480makeBracketed :: Builder -> Expr -> Expr -> (Lines, Builder)
458makeBracketed :: Builder -> Expr -> Expr -> (Lines, Builder)
481makeBracketed indent expr bracketedExpr =
459makeBracketed indent expr bracketedExpr =
484− fromExpr indent Atomic expr
461+ (lines , builder ) = fromExpr indent Atomic expr
486− (bracketedLines, bracketedBuilder) =
487− fromExpr indent Whatever bracketedExpr
462+ (bracketedLines, bracketedBuilder) = fromExpr indent Whatever bracketedExpr
489− ( merge lines bracketedLines
464+ ( merge lines bracketedLines
490− , builder <> "[" <> bracketedBuilder <> "]"
465+ , builder <> "[" <> bracketedBuilder <> "]"