どう書く? org 「あみだくじ」 (別解)

この間解いた問題の別解を考えてみた。
別解というほど根本的な違いはないけれど。

import List

main :: IO ()
main = do headline <- getLine
          amida <- getContents
          let footline = foldl step headline $ lines amida
          putStrLn $ concat [headline, "\n", amida, footline]

step :: String -> String -> String
step [l]  _    = [l]
step lots line = let (lot, lots')  = splitAt 2 $ swap lots line
                     lots'' = step lots' (drop 2 line)
                     in lot ++ lots''

swap :: String -> String -> String
swap (l1:' ':l2:ls) ('|':'-':'|':_) = l2:' ':l1:ls
swap lots           _               = lots

今回はあみだくじを1行ずつ実行して、行ごとに結果を求めている。