// Type 'Refinement<unknown, Equal>' is not assignable to type '(thing: unknown) => thing is Equal & string'.
// Type predicate 'a is Equal' is not assignable to 'thing is Equal & string'.
// Type 'Equal' is not assignable to type 'Equal & string'.
// Type 'Equal' is not assignable to type 'string'.ts(2322)
const isNotNullableAndEqual: (thing: unknown) => thing is EQ.Equal & string =
pipe(
P.isString,
P.compose(EQ.isEqual),
);
// Type 'Refinement<unknown, Equal>' is not assignable to type '(thing: unknown) => thing is Equal & string'.
// Type predicate 'a is Equal' is not assignable to 'thing is Equal & string'.
// Type 'Equal' is not assignable to type 'Equal & string'.
// Type 'Equal' is not assignable to type 'string'.ts(2322)
const isNotNullableAndEqual: (thing: unknown) => thing is EQ.Equal & string =
pipe(
P.isString,
P.compose(EQ.isEqual),
);