Привет, у меня есть функция, которая должна возвращать параметр универсального значения, и он выглядит следующим образом:
let HandleHeaderConfirmation (client : TcpClient) (message : BaseFrame) (responseId : uint32, frameId: uint32) (isAcknowledgment : bool): Async<(Option<'TCommand> * TcpClient)> =
async{
match isAcknowledgment with
| false ->
let reason : NackRejectionReason = NackRejectionReason.InvalidCrc
let nack : NackCommand = Confirmations.BuildNackResponse reason message (responseId, frameId)
_logger.Info(sprintf "Sending header(CRC8) NACK reason %s" ((NackRejectionReason.InvalidCrc).ToString()))
_logger.Info(sprintf "Invalid header CRC8: %o raw header data %A" message.HeaderCrc message.RawHeaderData)
return (Some nack, client)
| _ ->
_logger.Info(sprintf "Correct header(CRC8) message accepted")
let ack : AckCommand = new AckCommand(responseId)
return (Some ack, client)
}
А для более подробной информации Команды Nack и Ack наследуются от BaseResponseCommand и наследуются от базового фрейма.
Моя проблема в том, что F # определяет TCommand только как NackCommand, и если я изменю это значение на
Async<(Option<BaseFrame> * TcpClient)>
, он ожидает, что базовый кадр не является командой Nack или Ack.Так возможна ли такая вещь?