В Haskell, как я могу напечатать список с плавающей точкой (или, скорее, Fractional
), а также указать форматирование?Например, putStrLn $ magic "%.2f" [3.14159]
должен печатать [3.14]
.
Как указано здесь есть Text.Printf (printf)
, но я не понимаю, как использовать его со списками?
Одна вещь, которая «работает» - это
printf' :: [Double] -> [String]
printf' l = map (\x -> printf "%.2f" x) l
с
main = do
putStrLn $ show (printf' [3.14159])
, но это ужасно, должен быть другой путь.
Первые два примера в этот ответ на подобный вопрос вообще не работает.
Ответ здесь достаточно аккуратный, но, как указывалось, не является безопасным для типов, плюс он ломается Read
/ Show
interop.
Есть ли другие альтернативы?Спасибо.