Where to add type annotations to curried functions?
In F# interactive, I can find the type of sprintf.

    >sprintf;;
    val it : (Printf.StringFormat<'a> -> 'a) = <fun:clo@163>

I can find the type of sprintf curried with the first parameter, if the curried function is not generic.

    > sprintf "%g";;
    val it : (float -> string) = <fun:it@134-16>

But if it is generic, then I get the value restriction error.

    > sprintf "%A";;
    error FS0030: Value restriction. The value 'it' has been inferred to have generic type
    val it : ('_a -> string)    
    Either make the arguments to 'it' explicit or, if you do not intend for it to be generic, add a type annotation.

I can add a type annotation to get rid of the value restriction like this, specializing the function for a type, eg. DateTime.

    >let f : (DateTime -> string) = sprintf "%A";;
    val f : (DateTime -> string)

How can I add the type annotation without the binding? I've tried the following ...

    >sprintf "%A" : (DateTime -> string);;
    error FS0010: Unexpected symbol ':' in interaction. Expected incomplete structured construct at or before this point, ';', ';;' or other token.

This is a similar example but harder ...

    >sprintf "%a";;
    error FS0030: Value restriction. The value 'it' has been inferred to have generic type
    val it : ((unit -> '_a -> string) -> '_a -> string)    
    Either make the arguments to 'it' explicit or, if you do not intend for it to be generic, add a type annotation.
Where to add type annotations to curried functions?
===

In F# interactive, I can find the type of sprintf.

    >sprintf;;
    val it : (Printf.StringFormat<'a> -> 'a) = <fun:clo@163>

I can find the type of sprintf curried with the first parameter, if the curried function is not generic.

    > sprintf "%g";;
    val it : (float -> string) = <fun:it@134-16>

But if it is generic, then I get the value restriction error.

    > sprintf "%A";;
    error FS0030: Value restriction. The value 'it' has been inferred to have generic type
    val it : ('_a -> string)    
    Either make the arguments to 'it' explicit or, if you do not intend for it to be generic, add a type annotation.

I can add a type annotation to get rid of the value restriction like this, specializing the function for a type, eg. DateTime.

    >let f : (DateTime -> string) = sprintf "%A";;
    val f : (DateTime -> string)

How can I add the type annotation without the binding? I've tried the following ...

    >sprintf "%A" : (DateTime -> string);;
    error FS0010: Unexpected symbol ':' in interaction. Expected incomplete structured construct at or before this point, ';', ';;' or other token.

This is a similar example but harder ...

    >sprintf "%a";;
    error FS0030: Value restriction. The value 'it' has been inferred to have generic type
    val it : ((unit -> '_a -> string) -> '_a -> string)    
    Either make the arguments to 'it' explicit or, if you do not intend for it to be generic, add a type annotation.