Хотелось бы сделать случайную последовательность открывающих скобок и соответствующую последовательность закрывающих скобок. Вот мой (частичный) код:
shuffle :: [a] -> IO [a]
ps xs ys = map snd . sort $ zip xs ys
opens = "[{("
closes = "]})"
parens = do
ord <- shuffle [0..length opens]
let os = ps ord opens
cs = reverse $ ps ord closes
Не работает, так как генерирует новый ord
для каждого шаффла. Как сделать так, чтобы он запомнил ord
и использовал его для обеих случайных комбинаций?