Учитывая следующие типы:
type Trip = {
From: string
To: string
}
type Passenger = {
Name: string
LastName: string
Trips: Trip list
}
Я использую следующие конструкторы:
type PassengerBuilder() =
member this.Yield(_) = Passenger.Empty
[<CustomOperation("lastName")>]
member __.LastName(r: Passenger, lastName: string) =
{ r with LastName = lastName }
[<CustomOperation("name")>]
member __.Name(r: Passenger, name: string) =
{ r with Name = name }
type TripBuilder() =
member __.Yield(_) = Trip.Empty
[<CustomOperation("from")>]
member __.From(t: Trip, f: string) =
{ t with From = f }
// ... and so on
для создания записей типа Passenger
, например:
let passenger = PassengerBuilder()
let trip = TripBuilder()
let p = passenger {
name "john"
lastName "doe"
}
let t = trip {
from "Buenos Aires"
to "Madrid"
}
как мне объединить PassengerBuilder
и TripBuilder
, чтобы добиться такого использования?
let p = passenger {
name "John"
lastName "Doe"
trip from "Buenos Aires" to "Madrid"
trip from "Madrid" to "Paris"
}
который возвращает запись Passenger
, например:
{
LastName = "Doe"
Name = "John"
Trips = [
{ From = "Buenos Aires"; To = "Madrid" }
{ From = "Madrid"; To = "Paris" }
]
}
Passenger
объявляется не так. Вы хотите вернуть другой тип? Или вы хотите изменить определениеPassenger
? - person Fyodor Soikin   schedule 05.03.2018Passenger
имеет толькоName
,LastName
иTrip list
, что и показано в нижнем примере. - person Federico Berasategui   schedule 05.03.2018TripBuilder
для созданияTrip
и передавать их вPassengerBuilder
, чтобы он назначал этиTrip
в записьPassenger
. - person Federico Berasategui   schedule 05.03.2018