Seems like the only thing left to do is getting patches into cat and diff. Seriously, adding support for inline signatures would solve the problem in a general way. Why not do this?
val map : f:('a -> 'b) -> list:'a list -> 'b list
let map f list = (*...*)
[1] http://tomasp.net/blog/fswebsnippets-intro.aspx [2] http://tomasp.net/blog/fsharp-literate-programming.aspx