У меня есть два типа примеров, определенные в следующем порядке:определение типа и вывод типов в F #
type Quote = {QuoteNum: decimal option; ShipToID: decimal option}
type Sales = {SalesNum: decimal option; ShipToID: decimal option}
, и я пытаюсь написать функцию, которая может принимать оба типа:
let fx (y: Map<decimal option, _ list>) =
y
|> Map.map (fun key list -> list
|> List.map (fun x -> x.ShipToID))
Когда я пытаюсь передать Map<decimal option, Quote list>
функции, я получаю сообщение об ошибке:
Type mismatch. Expecting a
Map<decimal option,Sales list>
but given a
Map<decimal option,Quote list>
Я бы подумал, что я бы способный передать карту обоих типов функции, но компилятор, кажется, делает вывод, что для функции приемлема только Map<decimal option, Sales list>
. Я подозреваю, что компилятор «видит» тип Sales
совсем недавно и предполагает, что это то, что нужно функции. Я думал, что я сделал функцию относительно общей, включив _
в аннотацию типа.
Как я могу заставить функцию принять оба типа? Могу ли я это сделать без переопределения самих типов?
Типы, которые вы определили, не являются картами, а типами записей, и они разные. –