В конце программы ()
появляется в тестовом файле (output.txt
)
Причина, по которой он пишет ()
, состоит в том, что подпись main2
это main2 :: IO ()
. Это означает, что output
в output <- main2
будет типом модуля [wiki] , и, таким образом, show ()
вернет строку "()"
.
Но на самом деле вам не обязательно использовать здесь mapM_
. Вы можете создать функцию, которая будет для данного [[Char]]
генерировать список символов, например:
rotateImg :: (Int -> Int -> Char) -> [Int] -> [Int] -> <b>[[Char]]</b>
rotateImg getPix ys xs = [
[ getPix (floor x) (floor y) | x' <- xs, let (x, y) = rotate (pi/3) (fromIntegral (x'-5), fromIntegral (y'-1)) ]
| y' <- ys
]
Итак, тогда мы можем определить в main
функцию, которая затем считывает информацию об изображении, поворачивает изображение и, наконец, записывает повернутое изображение в файл (или печатает его в стандартный вывод):
main :: IO ()
main = do
image <- lines <$> readFile "input.txt"
let image2 = <b>rotateImg (getPixel image) [0..30] [0..40]</b>
writeFile "output.txt" (unlines output)