export class SingleItem < T > { constructor ( public item ) { } map < U > ( fn ) { return new SingleItem ( fn ( this . item ) ) ; } filter ( fn ) { return fn ( this . item ) ? this : new SingleItem ( undefined ) ; } } export const singleItem = < T > ( item ) => new SingleItem ( item ) ;