Сначала определите функцию, которая преобразует Int
в String
, затем добавляет пробел к результату.
\x -> ' ' : show x
Теперь сопоставьте это со своим списком:
> map (\x -> ' ' : show x) [1..8]
[" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"]
Теперь нам просто нужно объединить все строки в одну:
> concat (map (\x -> ' ' : show x) [1..8])
" 1 2 3 4 5 6 7 8"
Это можно упростить с помощью функции concatMap
:
> concatMap (\x -> ' ':show x) [1..8]
" 1 2 3 4 5 6 7 8"
, которая составляет основу дляMonad
экземпляр для списков:
> [1..8] >>= (\x -> ' ' : show x)
" 1 2 3 4 5 6 7 8"
или даже более кратко, используя композицию функций
> [1..8] >>= (' ' :) . show
" 1 2 3 4 5 6 7 8"
Как только у вас будет последняя строка, сейчас вы можете беспокоитьсяо печати.
> putStrLn $ [1..8] >>= (' ' :) . show
1 2 3 4 5 6 7 8