def reach

near-v-framework@0.4.0.0 · domain/architecture/system/effects.bend:56

import near-v-framework@0.4.0.0/domain/architecture/system/effects.bend as Effects
import Base
import bend-kit-files@0.1.0.0/files.bend as Fs
import near-v-framework@0.4.0.0/domain/architecture/system/effs/io.bend as X

56# Each step reads one file; the number of files squared bounds the walk.
57def reach(fuel: Nat, +todo: List<&2, String>, +seen: List<&2, String>, +root: String) -> IO(List<&2, String>):
58  match fuel:
59    case 0n:
60      IO.pure(List<&2, String>, seen)
61    case 1n+k:
62      match todo:
63        case []:
64          IO.pure(List<&2, String>, seen)
65        case +f <> rest:
66          do IO<List<&2, String>>:
67            text : String <- X.read_head(root ++ "/" ++ f, 4096)
68            +known : Bool = List.contains(~String, ~String.eq, seen, f)
69            reach(k, List.append(&2, String, rest, Bool.pick(List<&2, String>, known, [], imports(String.lines(text), Fs.path.parent(f)))), Bool.pick(List<&2, String>, known, seen, f <> seen), root)

Uses (16)

Used by (2)