После
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 . И лекции Москвина на Степике очень хорошие.