1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module Doukaku179 = begin
    type PeriodicAutoWriter = class
        val mutable timer : System.Threading.Timer
        new() = { timer = null }
        member t.Start()  = t.timer <- new System.Threading.Timer(
                              (fun _ -> printf "%s" "a"), null, 0, 1000)
        member t.Stop()   = if t.timer <> null then (t.timer.Dispose();
                                                     t.timer <- null)
                                               else ()
        member t.Toggle() = if t.timer = null then t.Start() else t.Stop()
    end
    
    let read_char () = System.Console.ReadKey().KeyChar
    let keep_read () = seq { while true do yield read_char () done }
    let run () = let writer = new PeriodicAutoWriter() in
                 writer.Start ();
                 seq { for c in keep_read () do
                         yield (match c with
                                  'q' -> writer.Stop();   false
                                | 'p' -> writer.Toggle(); true
                                | _   -> true)
                       done }
                 |> Seq.find ((=) false)
                 |> (fun _ -> printfn "%s" "");;
end;;

#if COMPILED
let _ = Doukaku179.run ();;
#endif