逆順になるあみだくじ

http://ja.doukaku.org/20/ から。これってバブルソートだよね。

makeAmida n = mapM_ putStrLn $ amida n
    where amida 0 = [take (2*n-1) $ cycle "| "]
          amida m = let line = take (2*n-1) $ cycle "| "
                    in  map (\n -> updateList n '_' line) [1,3..2*(m-1)-1]
                            ++ amida (m-1)
updateList n e l = let (h,t) = splitAt n l in  h++e:tail t

リストの n 番目の要素を更新する関数が標準で準備されてないのはおかしいのではないだろうか。