Hi, I've had some trouble with my mail client and didn't see this question until just now. The route function (
http://hackage.haskell.org/packages/archive/snap-core/0.8.1/doc/html/Snap-Core.html#v:route) is designed primarily for matching route prefixes rather than whole routes because I think it's more powerful and it's usually what people want. To do what you want to do, use the "ifTop" function. It only executes its argument handler if there is nothing left to be matched in the route. It would look like this:
("/book", ifTop theBookHandler)