This has tripped me too. "where" clauses don't work like in Haskell,
they require a type declaration (page 7 of the tutorial) and you don't
get pattern matching assignments. Use a "let binding" instead (page 14
of the tutorial), i.e.
dequeue (mkQueue front Nil) =
let (revFrontHead :: revFrontTail) = reverse front in
(mkQueue Nil revFrontTail, revFrontHead)
Best,
Cezar.