code: func ShuffleGen(xs interface{}, rng *rand.Rand) {
  	chk := ty.Check(
  		new(func([]ty.A, *rand.Rand)),
  		xs, rng)
  	vxs := chk.Args[0]
  
  	// Implements the Fisher-Yates shuffle: http://goo.gl/Hb9vg
  	xsLen := vxs.Len()
  	swapper := swapperOf(vxs.Type().Elem())
  	for i := xsLen - 1; i >= 1; i-- {
  		j := rng.Intn(i + 1)
  		swapper.swap(vxs.Index(i), vxs.Index(j))
  	}
  }
docs: // ShuffleGen has a parametric type:
  //
  //	func ShuffleGen(xs []A, rng *rand.Rand)
  //
  // ShuffleGen shuffles `xs` in place using the given random number
  // generator `rng`.