2010-03-18 2 views

ответ

30

Существует модуль Printf в GHC.

import Text.Printf 
str :: String 
str = printf "%d %d" 10 20 

однако это, вероятно, проще всего сделать

str = show 10 ++ " " ++ show 20 
+0

Не работает Я получил 'ERROR имя_файла.hs: 3: Невозможно обосновать ограничения в явно набранной привязке'. Я использую WinHugs. –

+13

Вы должны переключиться на GHC. Объятия не поддерживается, медленно и поддерживает очень мало пакетов в Hackage. Он также не является частью спецификации платформы Haskell. –

+0

'Text.Printf.printf' возвращает действие IO (' IO() ') при полном применении, а не' String'. – SwiftsNamesake

22

Вы можете использовать функцию format предоставленную text-format-simple пакет:

import Text.Format 
format "{0} {1}" [show 10, show 20] 

Эта функция имеет подпись:

format :: String -> [String] -> String 

Так все, что вам нужно, это обеспечить параметры в строках.
Другой пример:

format "Some {0} believes that 1 + 1 = {1}." ["people",show 10] 
+0

Вау! Форматирование стиля C# в haskell. Отличная работа Дмитрий! и добро пожаловать в stackoverflow! –

+4

Я бы рекомендовал/не использовал этот пакет, так как он очень ограничен в том, что он может сделать. Я работаю над пакетом с именем [text-format] (http://hackage.haskell.org/package/text-format), который, как правило, более способен и уже вполне подходит для этой цели. –

+0

Дмитрий, все пакеты, которые вы указали, за исключением двойного преобразования, включены в платформу Haskell. Подавляющему большинству пользователей не придется устанавливать столько. Однако аргумент остается действительным. –

6

Ввод ответа здесь в случае, если кто-то ищет форматирования библиотеки в Haskell на StackOverflow. Там есть безопасная и быстрая библиотека форматирования, которая называется fmt. С его помощью вы можете написать такой код:

> "There are "+|n|+" million bicycles in "+|city|+"." 
Смежные вопросы