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

Function renderSimplyDecoratedSafe

packages/printer/src/internal/docTree.ts:296–341  ·  view source on GitHub ↗
(
  self: DocTree.DocTree<A>,
  M: monoid.Monoid<M>,
  renderText: (text: string) => M,
  renderAnnotation: (annotation: A, out: M) => M
)

Source from the content-addressed store, hash-verified

294)
295
296const renderSimplyDecoratedSafe = <A, M>(
297 self: DocTree.DocTree<A>,
298 M: monoid.Monoid<M>,
299 renderText: (text: string) => M,
300 renderAnnotation: (annotation: A, out: M) => M
301): Effect.Effect<M> => {
302 switch (self._tag) {
303 case "EmptyTree": {
304 return Effect.succeed(M.empty)
305 }
306 case "CharTree": {
307 return Effect.succeed(renderText(self.char))
308 }
309 case "TextTree": {
310 return Effect.succeed(renderText(self.text))
311 }
312 case "LineTree": {
313 return Effect.succeed(
314 M.combine(renderText("\n"), renderText(doc.textSpaces(self.indentation)))
315 )
316 }
317 case "AnnotationTree": {
318 return Effect.map(
319 Effect.suspend(() => renderSimplyDecoratedSafe(self.tree, M, renderText, renderAnnotation)),
320 (out) => renderAnnotation(self.annotation, out)
321 )
322 }
323 case "ConcatTree": {
324 if (Arr.isEmptyReadonlyArray(self.trees)) {
325 return Effect.succeed(M.empty)
326 }
327 const head = self.trees[0]
328 const tail = self.trees.slice(1)
329 return Arr.reduce(
330 tail,
331 Effect.suspend(() => renderSimplyDecoratedSafe(head, M, renderText, renderAnnotation)),
332 (acc, tree) =>
333 Effect.zipWith(
334 acc,
335 Effect.suspend(() => renderSimplyDecoratedSafe(tree, M, renderText, renderAnnotation)),
336 M.combine
337 )
338 )
339 }
340 }
341}
342
343// -----------------------------------------------------------------------------
344// Conversions

Callers 1

docTree.tsFile · 0.85

Calls 2

combineMethod · 0.65
mapMethod · 0.65

Tested by

no test coverage detected