| 556 | export const flatten = <A>(self: Doc.Doc<A>): Doc.Doc<A> => Effect.runSync(flattenSafe(self)) |
| 557 | |
| 558 | const flattenSafe = <A>(self: Doc.Doc<A>): Effect.Effect<Doc.Doc<A>> => |
| 559 | Effect.gen(function*() { |
| 560 | switch (self._tag) { |
| 561 | case "Fail": { |
| 562 | return self |
| 563 | } |
| 564 | case "Empty": { |
| 565 | return self |
| 566 | } |
| 567 | case "Char": { |
| 568 | return self |
| 569 | } |
| 570 | case "Text": { |
| 571 | return self |
| 572 | } |
| 573 | case "Line": { |
| 574 | return fail |
| 575 | } |
| 576 | case "FlatAlt": { |
| 577 | return yield* flattenSafe(self.right) |
| 578 | } |
| 579 | case "Cat": { |
| 580 | const left = yield* flattenSafe(self.left) |
| 581 | const right = yield* flattenSafe(self.right) |
| 582 | return cat(left, right) |
| 583 | } |
| 584 | case "Nest": { |
| 585 | const doc = yield* flattenSafe(self.doc) |
| 586 | return nest(doc, self.indent) |
| 587 | } |
| 588 | case "Union": { |
| 589 | return yield* flattenSafe(self.left) |
| 590 | } |
| 591 | case "Column": { |
| 592 | return column((position) => flatten(self.react(position))) |
| 593 | } |
| 594 | case "WithPageWidth": { |
| 595 | return pageWidth((pageWidth) => flatten(self.react(pageWidth))) |
| 596 | } |
| 597 | case "Nesting": { |
| 598 | return nesting((level) => flatten(self.react(level))) |
| 599 | } |
| 600 | case "Annotated": { |
| 601 | const doc = yield* flattenSafe(self.doc) |
| 602 | return annotate(doc, self.annotation) |
| 603 | } |
| 604 | } |
| 605 | }) |
| 606 | |
| 607 | /** @internal */ |
| 608 | export const changesUponFlattening = <A>(self: Doc.Doc<A>): Flatten.Flatten<Doc.Doc<A>> => |