packages feed

alms-0.4.9: examples/futures1.alms

(* An example with futures *)

#load "libthread"

let prompt : unit -> string Future.future =
  fun _:unit -> Future.new getLine

let printDots : int -> int -> unit =
  let rec loop (count : int) (delay : int) : unit =
    if count <= 0
      then ()
      else
        putStr ".";
        flush ();
        AThread.delay (1000 * delay);
        loop (count - 1) delay
  in loop

let main : string -> unit =
  fun message: string ->
    putStrLn message;
    let future = prompt () in
      printDots 80 20;
      putStrLn "";
      putStrLn (Future.sync future)

in main "whadday say? "