Для слежения за временем понадобились часы, которые будут издавать сигнал каждые 15 минут, например в 8:00, 8:15, 8:30 и так далее до конца света или закрытия программы.
open System
while true do
let time0 = DateTime.Now
let span = new TimeSpan(0, time0.Minute % 15, time0.Second)
let next = (time0 - span).AddMinutes 15.0
printf $"{next}"
while next > DateTime.Now do
Threading.Thread.Sleep 1000
Console.Beep()
printfn " - ok"
open System
let time0 = DateTime.Now
let span = new TimeSpan(0, time0.Minute % 15, time0.Second)
let time_seq = time0 - span |> Seq.unfold (fun s -> Some(s, s.AddMinutes 15.0))
let beeper t =
printf $"{t}"
if t > DateTime.Now then //только если будильник в будущем
while t > DateTime.Now do //спим пока не наступит
Threading.Thread.Sleep 1000
Console.Beep() //сигналим
printfn " - ok"
else //если будильник оказался в прошлом, например после спящего режима
printfn " - skip"
time_seq |> Seq.iter beeper