MCPcopy
hub / github.com/Effect-TS/effect / flattenSafe

Function flattenSafe

packages/printer/src/internal/doc.ts:558–605  ·  view source on GitHub ↗
(self: Doc.Doc<A>)

Source from the content-addressed store, hash-verified

556export const flatten = <A>(self: Doc.Doc<A>): Doc.Doc<A> => Effect.runSync(flattenSafe(self))
557
558const 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 */
608export const changesUponFlattening = <A>(self: Doc.Doc<A>): Flatten.Flatten<Doc.Doc<A>> =>

Callers 2

flattenFunction · 0.85

Calls 5

columnFunction · 0.85
pageWidthFunction · 0.85
nestingFunction · 0.85
flattenFunction · 0.70
annotateFunction · 0.50

Tested by

no test coverage detected