[<Measure>] type degC
[<Measure>] type degF
[<Measure>] type degK
let convertCtoF ( temp: float<degC> ) = (9.0 / 5.0 * (float temp) + 32.0) * 1.0<degF>
let convertCtoK ( temp: float<degC> ) = (float temp + 273.15) * 1.0<degK>
let convertFtoC ( temp: float<degF> ) = 5.0 / 9.0 * (float temp - 32.0) * 1.0<degC>
let convertFtoK ( temp: float<degF> ) = convertCtoK (convertFtoC (temp))
let convertKtoC ( temp : float<degK>) = (float temp - 273.15) * 1.0<degC>
let convertKtoF ( temp : float<degK>) = convertCtoF (convertKtoC (temp))
let degreesFahrenheit temp = temp * 1.0<degF>
let degreesCelsius temp = temp * 1.0<degC>
let degreesKelvin temp = temp * 1.0<degK>
let doConversion (suffix:char, inputDegrees:float) =
printfn "%8.2fF" ((convertCtoF (degreesCelsius inputDegrees))/(1.0<degF>))
printfn "%8.2fK" ((convertCtoK (degreesCelsius inputDegrees))/(1.0<degK>))
printfn "%8.2fC" ((convertFtoC (degreesFahrenheit inputDegrees))/(1.0<degC>))
printfn "%8.2fK" ((convertFtoK (degreesFahrenheit inputDegrees))/(1.0<degK>))
printfn "%8.2fC" ((convertKtoC (degreesKelvin inputDegrees))/(1.0<degC>))
printfn "%8.2fF" ((convertKtoF (degreesKelvin inputDegrees))/(1.0<degF>))
printfn "Suffix is not valid"
printfn "Enter a temperature in degrees followed by (C, F, K):"
let input = System.Console.ReadLine()
let mutable inputDegrees = 0.
if not (String.IsNullOrWhiteSpace(input)) then
let suffix = input.[input.Length-1]
let tryParse = System.Double.TryParse(input.Remove(input.Length-1), &inputDegrees)
doConversion(suffix, inputDegrees)
printfn "Degrees value is not valid"
printfn "Suffix is not valid"