def fold_run

stelliferous@0.0.2.0 · proofs/traversal_witness.bend:253

import stelliferous@0.0.2.0/proofs/traversal_witness.bend as TraversalWitness
import Base
import stelliferous@0.0.2.0/traversal_loop.bend as Loop
import stelliferous@0.0.2.0/traversal_array.bend as Traversal

253def fold_run(~Reader: Type,~Element: Data,~Accumulator: Data,~Context: Data,~ReaderEvidence: @-reader: Reader -> Data,
254  ~read: Reader -> Context -> U32 -> Reader & Element,~combine: Accumulator -> Element -> Accumulator,
255  ~read_preserves: @-reader: Reader -> @context: Context -> @index: U32 -> ReaderEvidence(reader) ->
256    Sample<Reader,Element,reader,read(reader,context,index)>,
257  count: Nat,-reader: Reader,-state: Traversal.State<&1,&2,Reader,Accumulator,Context>,+reader_evidence: ReaderEvidence(reader),
258  evidence: FoldEvidence<Reader,Accumulator,Context,reader,state>) ->
259  FoldEvidence<Reader,Accumulator,Context,reader,
260    Loop.run(~Traversal.State<&1,&2,Reader,Accumulator,Context>,~Traversal.fold_step(~Reader,~Element,~Accumulator,~Context,~read,~combine),count,state)>:
261  match count:
262    case 0n: evidence
263    case 1n+rest:
264      fold_run(~Reader,~Element,~Accumulator,~Context,~ReaderEvidence,~read,~combine,~read_preserves,rest,reader,
265        Traversal.fold_step(~Reader,~Element,~Accumulator,~Context,~read,~combine,state),reader_evidence,
266        fold_step(~Reader,~Element,~Accumulator,~Context,~ReaderEvidence,~read,~combine,~read_preserves,reader,state,reader_evidence,evidence))

Uses (9)

Used by (2)