MCPcopy Index your code
hub / github.com/Effect-TS/effect / compactSafe

Function compactSafe

packages/printer/src/internal/layout.ts:163–218  ·  view source on GitHub ↗
(
  docs: List.List<Doc.Doc<A>>,
  i: number
)

Source from the content-addressed store, hash-verified

161export const compact = <A>(self: Doc.Doc<A>): DocStream.DocStream<A> => Effect.runSync(compactSafe(List.of(self), 0))
162
163const compactSafe = <A>(
164 docs: List.List<Doc.Doc<A>>,
165 i: number
166): Effect.Effect<DocStream.DocStream<A>> =>
167 Effect.gen(function*() {
168 if (List.isNil(docs)) {
169 return InternalDocStream.empty
170 }
171 const head = docs.head
172 const tail = docs.tail
173 switch (head._tag) {
174 case "Fail": {
175 return InternalDocStream.failed
176 }
177 case "Empty": {
178 return yield* compactSafe(tail, i)
179 }
180 case "Char": {
181 const stream = yield* compactSafe(tail, i + 1)
182 return InternalDocStream.char(stream, head.char)
183 }
184 case "Text": {
185 const stream = yield* compactSafe(tail, i + head.text.length)
186 return InternalDocStream.text(stream, head.text)
187 }
188 case "Line": {
189 const stream = yield* compactSafe(tail, 0)
190 return InternalDocStream.line(stream, 0)
191 }
192 case "FlatAlt": {
193 return yield* compactSafe(List.cons(head.left, tail), i)
194 }
195 case "Cat": {
196 const list = List.cons(head.left, List.cons(head.right, tail))
197 return yield* compactSafe(list, i)
198 }
199 case "Nest": {
200 return yield* compactSafe(List.cons(head.doc, tail), i)
201 }
202 case "Union": {
203 return yield* compactSafe(List.cons(head.right, tail), i)
204 }
205 case "Column": {
206 return yield* compactSafe(List.cons(head.react(i), tail), i)
207 }
208 case "WithPageWidth": {
209 return yield* compactSafe(List.cons(head.react(InternalPageWidth.unbounded), tail), i)
210 }
211 case "Nesting": {
212 return yield* compactSafe(List.cons(head.react(0), tail), i)
213 }
214 case "Annotated": {
215 return yield* compactSafe(List.cons(head.doc, tail), i)
216 }
217 }
218 })
219
220// -----------------------------------------------------------------------------

Callers 1

compactFunction · 0.85

Calls 1

textMethod · 0.45

Tested by

no test coverage detected