// @flow // Filter the contents of an array declare function my_filter>(v: Array, cb: P): Array<$Refine>; type A = { kind: 'A', u: number } type B = { kind: 'B', v: string } type C = { kind: 'C', y: boolean } type D = { kind: 'D', x: boolean } type E = { kind: 'E', y: boolean } declare var ab: Array; (my_filter(ab, (x): %checks => x.kind === 'A'): Array); // ERROR (my_filter(ab, (x): %checks => x.kind !== 'A'): Array); // ERROR