Recentemente ho scritto un codice che tratta di terze parti - ovviamente si verificheranno degli errori, quindi utilizzerò le / o forse le monade se appropriato. Poiché si tratta di C #, sto anche utilizzando attività asincrone.
Il mio problema è dopo che è stato detto tutto & fatto i miei tipi di ritorno sono piuttosto prolissi. per es.
Task<Either<ApiErrorEnum, ActualApiResultDto>> GetSomeFoo(int fooId);
Ma aspetta che possa migliorare ancora
Task<Either<ApiErrorEnum, IEnumerable<ActualApiResultDto>> GetSeveralFoos()
È un po 'troppo, ma mi sembra tutto necessario. Ovviamente l'attività < .. > è perché si tratta di un'operazione legata all'IO. l'Either è necessario perché questo può andare storto in molti modi diversi, e il DTO del risultato reale è necessario perché è quello che cerco davvero.
Ho scritto del codice per fondamentalmente typedef Either<ApiErrorEnum,T>
ma è un po 'carente in quanto il codice dell'infrastruttura per O ho scritto non può gestire abbastanza i tipi derivati (ho provato, c'è sempre un caso limite o due ).
Domanda TLDR: come posso ridurre la verbosità dei miei tipi di ritorno?