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
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)