Filter by a transformed list, then untransform the result
Exercise 1

If you have a lambda (or any function) of type (a,b)-&gt;c, instead of writting it like this (\x-&gt;...), you can write it like this (\(x,y)-&gt;...). It will remove the need of calling fst like in your skip function. You should change the name skip too, because it already exist in the prelude and it's kinda unclear because they have different meaning. I would call it something like skipEvery

Exercise 2

as is a keyword in Haskell, used for module importation. It will compile if you use it as a variable, but if you a text editor with syntax highlighting, it will be weird


  My instincts say that I could implement both of these something like
  this:

localMaxima' :: Integral a =&gt; [a] -&gt; [a] 
localMaxima' xs = filterBy isLocalMaximum sliding3 xs



Your instinct wasn't wrong, but there is an alternative to filterBy, which is mapMaybe. The resulting code would be something like this

whenMaybe p x = if p x then Just x else Nothing
localMaxima' = mapMaybe (whenMaybe isLocalMaximum) . sliding3


You should use zip instead of zipWith (,), because both operations are equivalent