filter p (x :: xs) with (filter p xs) | (_ ** xs') = if p x then (_ ** x :: xs') else (_ ** xs')
filter p (x :: xs) = if p x then (_ ** x :: snd (filter p xs)) else (_ ** snd (filter p xs)) ?