Причина проблемы здесь не в выводе типа. В первом примере использования определите два свойства, которые имеют одинаковые имена, но разные типы возврата.
type MyType() =
static member processString (_string:string) = _string.Substring(0, 1)
static member processInt (_int:int) = _int.ToString()
static member processItems = List.map MyType.processString
static member processItems = List.map MyType.processInt
второй пример верен, потому что вы явно объявили два метода
type MyType() =
static member processString (_string:string) = _string.Substring(0, 1)
static member processInt (_int:int) = _int.ToString()
static member processItems (_strings:string list) = _strings |> List.map MyType.processString
static member processItems (_ints:int list) = _ints |> List.map MyType.processInt
Вы можете изменить его, удалив аннотации типов:
type MyType() =
static member processString (_string:string) = _string.Substring(0, 1)
static member processInt (_int:int) = _int.ToString()
static member processItems s = s |> List.map MyType.processString
static member processItems i = i |> List.map MyType.processInt
в третьем примере вы пытаетесь определить свойство и метод с одинаковыми именами (C # это тоже запрещает, через IIRC это не запрещено спецификацией CLI)
type MyType() =
static member processString (_string:string) = _string.Substring(0, 1)
static member processInt (_int:int) = _int.ToString()
static member processItems (_strings:string list) = _strings |> List.map MyType.processString
static member processItems = List.map MyType.processInt