9 | lcg s = cast {to = Nat} $
(cast {to = Integer} s * 1664525 + 1013904223) `mod` 4294967296
12 | shuffleVect : {n : Nat} -> Nat -> Vect n a -> Vect n a
13 | shuffleVect {n = 0} _ xs = xs
14 | shuffleVect {n = 1} _ xs = xs
15 | shuffleVect {n = S k} seed xs =
16 | let idx = seed `mod` (S k)
17 | i = restrict k (cast idx)
18 | xs' = swapFin FZ i xs
20 | in head xs' :: shuffleVect seed' (tail xs')
22 | swapFin : Fin (S k) -> Fin (S k) -> Vect (S k) a -> Vect (S k) a
26 | in replaceAt i vj (replaceAt j vi v)
30 | shuffle : Nat -> List a -> List a
33 | in toList (shuffleVect seed v)