Most functions in F# are created with the let syntax:
let timesTwo x = x * 2
This defines a function named timesTwo that takes a single parameter x. If you run an interactive F# session (fsharpi on OS X and Linux, fsi.exe on Windows) and paste that function in (and add the ;; that tells fsharpi to evaluate the code you just typed), you'll see that it replies with:
val timesTwo : x:int -> int
This means that timesTwo is a function that takes a single parameter x of type int, and returns an int. Function signatures are often written without the parameter names, so you'll often see this function type written as int -> int.
But wait! How did F# know that x was an integer parameter, since you never specified its type? That's due to type inference. Because in the function body, you multiplied x by 2, the types of x and 2 must be the same. (As a general rule, F# will not implicitly cast values to different types; you must explicitly specify any typecasts you want).
If you want to create a function that doesn't take any parameters, this is the wrong way to do it:
let hello = // This is a value, not a function
printfn "Hello world"
The right way to do it is:
let hello () =
printfn "Hello world"
This hello function has the type unit -> unit, which is explained in The "unit" type.