Ответ 1
Как насчет:
abstract member createEmployee : firstName:string -> lastName:string -> Employee
?
Это типичное объявление абстрактного элемента в F #:
abstract member createEmployee : string -> string -> Employee
Вы определяете типы аргументов, но не их имена. Без имен, как вы определяете, что каждый параметр, когда вы реализуете интерфейс? Другими словами, как вы узнаете, будет ли интерфейс реализован как 1- или 2 -?
1- member this.createEmployee firstName lastName = ...
2- member this.createEmployee lastName firstName = ...
Я рассматриваю проблему с неправильной точки зрения (используется для С#)?
Как насчет:
abstract member createEmployee : firstName:string -> lastName:string -> Employee
?
Синтаксис для этого - супертипная ИМО. Я хотел сделать это с параметрами как кортеж (например, метод С#), и только через пробную версию и ошибку я нашел, что это работает:
abstract member PutChar : x:int * y:int * c:char * flag:Background -> unit
И этот более уродливый вариант также работает:
abstract member PutChar : x : int * y : int * c : char * flag : Background -> unit
Ниже приведены все, что казалось разумным, но не с той же ошибкой - Unexpected symbol ':' in member definition.
:
// ALL BAD vvv
abstract member PutChar : (x:int * y:int * c:char * flag:Background) -> unit
abstract member PutChar : (x:int, y:int, c:char, flag:Background) -> unit
abstract member PutChar : (x:int) * (y:int) * (c:char) * (flag:Background) -> unit
// ALL BAD ^^^