import { Task } from './task' ; import { UnknownError } from './unknown-error' ; declare module './task' { interface Task < T , E > { pipe ( ) : Task < T , E > ; pipe < T1 , E1 > ( f1 ) : Task < T1 , E1 | UnknownError > ; pipe < T1 , T2 , E1 , E2 > ( f1 , f2 ) : Task < T2 , E2 | UnknownError > ; pipe < T1 , T2 , T3 , E1 , E2 , E3 > ( f1 , f2 , f3 ) : Task < T3 , E3 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , E1 , E2 , E3 , E4 > ( f1 , f2 , f3 , f4 ) : Task < T4 , E4 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , E1 , E2 , E3 , E4 , E5 > ( f1 , f2 , f3 , f4 , f5 ) : Task < T5 , E5 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , E1 , E2 , E3 , E4 , E5 , E6 > ( f1 , f2 , f3 , f4 , f5 , f6 ) : Task < T6 , E6 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , E1 , E2 , E3 , E4 , E5 , E6 , E7 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 ) : Task < T7 , E7 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 ) : Task < T8 , E8 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , f9 ) : Task < T9 , E9 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , f9 , f10 ) : Task < T10 , E10 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 , E11 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , f9 , f10 , f11 ) : Task < T11 , E11 | UnknownError > ; pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 , E11 , E12 > ( f1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , f9 , f10 , f11 , f12 ) : Task < T12 , E12 | UnknownError > ; } } Task . prototype . pipe = function < TFinal , EFinal > ( ... fns ) : Task < TFinal , EFinal | UnknownError > { return new Task ( ( outerResolve , outerReject ) => { const newTask = fns . reduce ( ( task , f ) => { try { return f ( task ) ; } catch ( err ) { return Task . reject ( new UnknownError ( err ) ) ; } } , this ) ; return newTask . fork ( outerReject , outerResolve ) ; } ) ; } ;