>>131 >>133
gen = mkSplitUniqSupply 'a'

newI :: IO UniqSupply -> IO Int
newI g = liftM (getKey.uniqFromSupply) g

で newI gen を呼ぶ度に再帰の最中でも異なる数が出るようになりました
IOがくっついてるのが面倒臭くなりましたが