Umm... Pseudo-code follows
module Book = struct
type t = { sections: Section.t list; ... }
....
get_paragraphs t = map (fun s -> Section.get_paragraphs s) t.sections
.....
end
So it is not that hard to have both FP and DL