/* @flow */ declare class Bar { update(updater: (value: this) => Bar): Bar; } declare function foo( initialValue: U, callbackfn: (previousValue: U) => U ): U; declare var items: Bar; declare var updater: (value: Bar) => Bar; foo( items, (acc) => acc.update(updater) );