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