Simplify closure calculation with Result.iter
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
parent
f38edc22f0
commit
6a08e36f4b
10
src/lib.ml
10
src/lib.ml
|
@ -874,16 +874,10 @@ and closure_with_overlap_checks db ts ~stack =
|
||||||
>>= fun () ->
|
>>= fun () ->
|
||||||
Dep_stack.push stack (to_id t) >>= fun stack ->
|
Dep_stack.push stack (to_id t) >>= fun stack ->
|
||||||
t.requires >>= fun deps ->
|
t.requires >>= fun deps ->
|
||||||
iter deps ~stack >>| fun () ->
|
Result.iter deps ~f:(loop ~stack) >>| fun () ->
|
||||||
res := t :: !res
|
res := t :: !res
|
||||||
and iter ts ~stack =
|
|
||||||
match ts with
|
|
||||||
| [] -> Ok ()
|
|
||||||
| t :: ts ->
|
|
||||||
loop t ~stack >>= fun () ->
|
|
||||||
iter ts ~stack
|
|
||||||
in
|
in
|
||||||
iter ts ~stack >>| fun () ->
|
Result.iter ts ~f:(loop ~stack) >>| fun () ->
|
||||||
List.rev !res
|
List.rev !res
|
||||||
|
|
||||||
let closure_with_overlap_checks db l =
|
let closure_with_overlap_checks db l =
|
||||||
|
|
|
@ -59,4 +59,11 @@ let concat_map =
|
||||||
in
|
in
|
||||||
fun l ~f -> loop f [] l
|
fun l ~f -> loop f [] l
|
||||||
|
|
||||||
|
let rec iter t ~f =
|
||||||
|
match t with
|
||||||
|
| [] -> Ok ()
|
||||||
|
| x :: xs ->
|
||||||
|
f x >>= fun () ->
|
||||||
|
iter xs ~f
|
||||||
|
|
||||||
type ('a, 'error) result = ('a, 'error) t
|
type ('a, 'error) result = ('a, 'error) t
|
||||||
|
|
|
@ -23,6 +23,8 @@ val map_error : ('a, 'error1) t -> f:('error1 -> 'error2) -> ('a, 'error2) t
|
||||||
|
|
||||||
val all : ('a, 'error) t list -> ('a list, 'error) t
|
val all : ('a, 'error) t list -> ('a list, 'error) t
|
||||||
|
|
||||||
|
val iter : 'a list -> f:('a -> (unit, 'error) t) -> (unit, 'error) t
|
||||||
|
|
||||||
val concat_map
|
val concat_map
|
||||||
: 'a list
|
: 'a list
|
||||||
-> f:('a -> ('b list, 'error) t)
|
-> f:('a -> ('b list, 'error) t)
|
||||||
|
|
Loading…
Reference in New Issue