import System.Environment (getArgs)

plotChar :: Int -> Float -> Float -> Float -> Float -> Char
plotChar iter cReal cImag y x
  | zReal^2 > 10000 = ' '
  | iter == 1       = '#'
  | otherwise       = plotChar (pred iter) cReal cImag zImag zReal
 where 
  zReal = x * x - y * y + cReal
  zImag = x * y * 2 + cImag

parseArgs :: [String] -> (Float, Float)
parseArgs []             = (-0.8, 0.156)
parseArgs [cReal, cImag] = (read cReal :: Float, read cImag :: Float)
parseArgs _              = error "Invalid arguments"

main :: IO ()
main = do
  args <- getArgs
  let (cReal, cImag) = parseArgs args
  print (cReal, cImag)
  mapM_ putStrLn $ [-100,-96..100] >>= \y -> 
    [[-280,-276..280] >>= \x -> [plotChar 50 cReal cImag (y/100) (x/200)]]