undocumented record behaviour

The following code is valid apparently:

module test

:: T = {a :: Int, b :: Bool}

Start =
	let /*a = 42*/
	    b = True
	in ({T | a, b}, {T | b, a})

a = 42

Is this a bug in the compiler or a missing feature in the language report (section 5.2).