It’s easy to lose track of important data when logging output to the console window, fortunately you can use the System.Console.ConsoleColor property to set the output color. But unlike F#’s printfn, System.Console.WriteLine doesn’t use type inference and feels much different than the printf and printfn methods you’re used to.
Here’s how to create a version of printfn that takes a console color parameter.
#light /// Colored printf let cprintf c fmt = Printf.kprintf (fun s -> let old = System.Console.ForegroundColor try System.Console.ForegroundColor <- c; System.Console.Write s finally System.Console.ForegroundColor <- old) fmt // Colored printfn let cprintfn c fmt = cprintf c fmt printfn "" open System cprintfn ConsoleColor.Blue "Hello, World in BLUE!" cprintfn ConsoleColor.Red "... and in RED!" cprintfn ConsoleColor.Green "... and in GREEN!" let rotatingColors = seq { let i = ref 0 let possibleColors = Enum.GetValues(typeof<ConsoleColor>) while true do yield (enum (!i) : ConsoleColor) i := (!i + 1) % possibleColors.Length } "Experience the rainbow of possibility!" |> Seq.zip rotatingColors |> Seq.iter (fun (color, letter) -> cprintf color "%c" letter) printfn "" Console.WriteLine("(press any key to continue") Console.ReadKey(true) |> ignore