That looks backwards for your composition law, but I'm a bit tired so I wouldn't swear to it.
Surely you can do the same with the constructor class.
newtype Ab a = Ab (a -> Bool)
instance Siftable Ab where
siftAway _ = Ab (const False)
sift p (Ab g) = Ab ...
I'm not sure if my siftAway excludes anything it shouldn't....