После
where идут промежуточные выражения.
В обратных апострофах - инфиксная запись вызова функций (
a `div` b - тоже самое, что
div a b).
[3, 5..a `div` 2] - генерирует список
[3, 5, 7, 9...] и т. д. до
a `div` 2
(\c -> (c, a - c)) - это лямбда, возвращает кортеж.
В общем, практичнее для вас будет, наверное, запустить ghci и поиграться со всеми этими штуками по отдельности.
UPD. Вот очень прикольная простая книжка - если с английским дружите:
learnyouahaskell.com/chapters . И лекции Москвина на Степике очень хорошие.