Challenge Overview
Implement the `keep` and `discard` operation on collections. Given a collection and a predicate on the collection's elements, `keep` returns a new collection containing those elements where the predicate is true, while `discard` returns a new collection containing those elements where the predicate is false.
Visit the strain exercise on Exercism to read the full instructions and download the exercise files.
Source: Exercism haskell/strain