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
Comments
- Anonymous
October 01, 2008
PingBack from http://www.easycoded.com/f-zen/