Última actividad 4 days ago

Revisión bf76a9b570b21bd41f52399273eede66a492e34a

coroutines.ml Sin formato Playground
1open Effect
2open Effect.Deep
3
4type _ Effect.t += Yield : unit t
5
6type status =
7 | Complete
8 | Suspended of (unit, status) continuation
9
10let start (f : unit -> unit) : status =
11 match f () with
12 | () ->
13 Complete
14 | effect Yield, cont ->
15 Suspended cont
16
17let resume co =
18 match co with
19 | Complete ->
20 Invalid_argument "Can't resume completed quotation" |> raise
21 | Suspended k ->
22 continue k ()
23
24let yield () = perform Yield
25
26let task () =
27 "A" |> print_endline |> yield ;
28 "B" |> print_endline |> yield ;
29 "C" |> print_endline
30
31let () =
32 1 |> print_int |> print_newline ;
33 let co = start task in
34 2 |> print_int |> print_newline ;
35 let co = resume co in
36 3 |> print_int |> print_newline ;
37 resume co |> ignore