Prunes dead code, getTestSched
Organizes testLoop

Minor layout changes to testLoop for readability.
Revises getStaffList

First, makes the function total by accounting for the case of the empty
Schedule, []. It's a good idea to use and write as many total functions
as possible in Haskell, this reduces your surface area for errors.

Also replaces the use of an anonymous lambda with a locally defined
helper function. This is a bit more readable.
Renames isOffOn to hasOff
Revises hasOff

Mapping a predicate over a list and then checking the value of each is
the point of the `any` and `all` functions, so we can eliminate some
line noise by using them the right way.

Again I've eliminated an anonymous inner function for a hopefully
clearer local function.
Revises longestStreak

Rewritten using a pipeline of standard list functions.

This version nicely separates concerns into separate stages. First it
groups elements by equality, then filters out groups which do not match
the given element, then finds the run length of each remaining group,
prepends the list of run lengths with the identity element (0) so that
it will never be empty and cause `maximum` to emit an error, and finally
takes the maximum value from the list.
Whitespace