assert "rands"
  (all (`member` [1..10]) (take 5 (rands 1 10)))

assert "pureRand"
  (member (pureRand 1 10) [1..10])

assertEqual "randomize" (randomize []) []
assert "randomize" (eqAs (multiset integer) (randomize [1, 2, 3]) [1, 2, 3])

assert "R.between"
  (eqAs (multiset integer) (R.between 1 10) [1..10])

assert "R.multiset"
  (member
    (matchAll [1, 2] as R.multiset integer with $n :: $ns -> (n, ns))
    [[(1, [2]), (2, [1])], [(2, [1]), (1, [2])]])

assertEqual "R.multiset"
  (matchAll [1, 2] as R.multiset integer with #1 :: $ns -> ns)
  [[2]]

assert "R.set"
  (member
    (matchAll [1, 2] as R.set integer with $n :: $ns -> (n, ns))
    [[(1, [1, 2]), (2, [1, 2])], [(2, [1, 2]), (1, [1, 2])]])

assertEqual "R.set"
  (matchAll [1, 2] as R.set integer with #1 :: $ns -> ns)
  [[1, 2]]

assert "R.uncons"
  (member (R.uncons [1, 2]) [(1, [2]), (2, [1])])

assert "R.head"
  (member (R.head [1..10]) [1..10])

assert "R.tail"
  (member
    (R.tail [1..5])
    [[   2, 3, 4, 5],
     [1,    3, 4, 5],
     [1, 2,    4, 5],
     [1, 2, 3,    5],
     [1, 2, 3, 4   ]])

assert "f.rands"
  (all (\x -> x >= 1.0 && x <= 2.0) (take 10 (f.rands 1.0 2.0)))

assert "f.pureRand"
  (let x := f.pureRand 1.0 2.0 in x >= 1.0 && x <= 2.0)