リストモナドで

id:rubyco:20070704:mulを見て、「これはリストモナドだ〜」と思いました。こんな感じ。

module Main (main) where

main :: IO ()
main = mapM_ putStrLn f
  where
    f :: [String]
    f = do
      c1 <- ['-', '=', '+']
      c2 <- ['-', '=', '+']
      c3 <- ['-', '=', '+']
      return $ concat $ replicate 20 $ c1 : c2 : c3 : []
-- => ------------------------------------------------------------
--    --=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
--    --+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
--    -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
--    -==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
--    -=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+
--    -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-
--    -+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=
--    -++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++
--    =--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
--    =-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-=
--    =-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+
--    ==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-
--    ============================================================
--    ==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+
--    =+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-
--    =+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+=
--    =++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++
--    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
--    +-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=
--    +-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-+
--    +=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-+=-
--    +==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==+==
--    +=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=+
--    ++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-
--    ++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=++=
--    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++