Perhaps a silly question, but why does the return value from unbox appear (in my F# Interactive session) to be typed as obj instead of the concrete type int? As far as I can understand (trying to apply existing knowledge from C#) if it's typed as obj then it's still boxed. Example follows:

The types are box : 'T -> obj and unbox : obj -> 'T, so the functions convert between boxed (objects) and value types (int). You can call unbox<int> 42, because F# automatically inserts conversion from int to obj when calling a function.

Jono - you might have noticed that the symbol is a bit similar to the pipeline symbol, so you can think of (f >> g) v as v |> f |> g and of (f << g) v as v |> g |> f. See how the direction of the pipeline always matches the direction of the composition operator. Note: v |> g |> f is not equivalent to f <| g <| v, because the latter is parsed as (f <| g) <| v.
–
Ramon SnirAug 5 '11 at 16:25

@Tomas - LOL. You can just imagine how confusing the code looks to me as I learn F#. Without a solid grasp of all these funky operators, my code is best described as a dog's breakfast.
–
JonoAug 5 '11 at 16:35