ci sono due problemi: in primo luogo è necessario specificare l'intervallo che si desidera utilizzare tra gli elementi dell'elenco. Questo sarebbe un TimeSpan
, tuttavia non ha un membro statico Zero
.
Questo vincolo è richiesto dal skip range operator che richiede il tipo di 'step' di avere statici (+)
e Zero
membri
È possibile definire la propria struttura che supporta le operazioni necessarie però:
type TimeSpanW = { span : TimeSpan } with
static member (+) (d:DateTime, wrapper) = d + wrapper.span
static member Zero = { span = new TimeSpan(0L) }
È possono poi fare:
let ts = new TimeSpan(...)
let dateList = [a .. {span = ts} .. b]
Edit: Ecco una sintassi alternativa utilizzando i sindacati discriminati che si può preferire:
type Span = Span of TimeSpan with
static member (+) (d:DateTime, Span wrapper) = d + wrapper
static member Zero = Span(new TimeSpan(0L))
let ts = TimeSpan.FromDays(1.0)
let dateList = [a .. Span(ts) .. b]
Funziona magnificamente ... Esiste un collegamento che spiega cosa sta succedendo? Perché è richiesto Zero? Anche quell'operatore (+). –
@KnowsNotMuch - Richiesto dall'operatore "skip range" - Ho aggiornato la risposta con un collegamento. – Lee
@KnowsNotMuch - cosa sta effettivamente succedendo - il passo deve iniziare da 0 e poi aumentare - se si guarda la firma, il passaggio non deve avere lo stesso tipo degli endpoint. –