Printing patterns in Haskell
Seems fine. However, depending on the context and the rest of the program, you can relax pattern's type:

pattern :: Int -&gt; a -&gt; a -&gt; [[a]]


Also, since every putStrLn is basically hPutStrLn stdout, you could first glue all lines together with unlines and then print them with a single action:

main = putStr (unlines (pattern 48 '.' '+'))