Generating curved shapes in cga is really difficult. Instead, I would recommend inserting a pre-made asset in your case. Then, insert your asset(s) using i().
It is possible, however, to create simpler shapes like the tops of the Taj Mahal (see example linked below) by combining parts of a sphere and a cone. CGA offers the following 3D primitives: cube, sphere, cylinder, and cone. The resolution of sphere, cylinder, and cone primitives can be specified using the sides and divisions parameters. This means, you can make a cylinder whose top and bottom faces are hexagons (or any n-sided regular polygon). By splitting and combining primitives together (and maybe also combining some results from roof operations), it is possible to get some simple shapes, but this is basically the limit of cga.
To make something more complicated, you might be able to write a rule that builds the roof piece by piece from the bottom up using successive roofPyramid operations, or some other roof operation, with different angle settings on each level followed by split. But, this is complicated, and you don't want to be generating this kind of geometry for a roof piece, and it probably still won't even be possible to get the shape you want, so I don't recommend this. It is better to insert an asset.