My solution was buggy (fix below, I hope). It works for the simple example pattern I used but will break if you transform it or combine it with other patterns.
The problem is that while it produced a pattern whose output events vary quadratically with time, it didn't adjust which interval you query to get them. For example:
p = transTime poly $ n "1 .. 16" # s "bd"
queryArc p $ Arc (3/4) 1
[
(15/16>247/256)|n: 13.0n (cs6), s: "bd",
(247/256>63/64)|n: 14.0n (d6), s: "bd",
(63/64>255/256)|n: 15.0n (ds6), s: "bd",
(255/256>1)|n: 16.0n (e6), s: "bd"]
Only four events show up from 3/4 to 1, because only that many appeared in the linear pattern, even though in fact there should be 8:
queryArc p $ Arc (1/2) (3/4)
[
(¾>207/256)|n: 9.0n (a5), s: "bd",
(207/256>55/64)|n: 10.0n (as5), s: "bd",
(55/64>231/256)|n: 11.0n (b5), s: "bd",
(231/256>15/16)|n: 12.0n (c6), s: "bd"]
All of these are also 3/4 or above, and should be returned when we query that interval. It's possible for this to work anyway, but only by coincidence.
Fixing this is possible but no longer a one-liner
Because the time transformation maps each time cycle back to itself, we're guaranteed to get all the events that matter if we query the entire cycle. In that case we'll also get events that aren't within the query interval, so we also need to clip/filter to the right range. Here's what I ended up with:
import Data.Maybe(mapMaybe)
clipTo :: Arc -> [Event a] -> [Event a]
clipTo a = mapMaybe $ \evt -> fmap (\p -> evt {part = p}) (subArc a $ part evt)
queryFullCycles :: Pattern a -> Pattern a
queryFullCycles p = p {query = query'}
where
query' st = clipTo (arc st)
$ concat
$ map (\a -> query p st {arc = a})
$ cycleArcsInArc (arc st)
transTime :: (Time -> Time) -> Pattern a -> Pattern a
transTime f = queryFullCycles . (withResultArc $ mapCycle f)
And with these definitions, we can see that querying the last 1/4 of the range now gives 1/2 of the events as it should:
queryArc p $ Arc (3/4) 1
t> [(¾>207/256)|n: 9.0n (a5), s: "bd",
(207/256>55/64)|n: 10.0n (as5), s: "bd",
(55/64>231/256)|n: 11.0n (b5), s: "bd",
(231/256>15/16)|n: 12.0n (c6), s: "bd",
(15/16>247/256)|n: 13.0n (cs6), s: "bd",
(247/256>63/64)|n: 14.0n (d6), s: "bd",
(63/64>255/256)|n: 15.0n (ds6), s: "bd",
(255/256>1)|n: 16.0n (e6), s: "bd"]