2010-03-18 19 views

Respuesta

30

Hay un módulo de Printf en GHC.

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

sin embargo, es probablemente más fácil de simplemente hacer

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

no su trabajo llegué 'filename.hs error: 3: No se puede justificar limitaciones en binding' escrito de forma explícita. Estoy usando WinHugs. –

+13

Deberías cambiar a GHC. Los abrazos no se mantienen, son lentos y admiten muy pocos paquetes en Hackage. Tampoco forma parte de la especificación de Haskell Platform. –

+0

'Text.Printf.printf' devuelve una acción IO (' IO() ') cuando se aplica por completo, no un' String'. – SwiftsNamesake

22

usted podría utilizar la función format proporcionado por el paquete text-format-simple:

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

Esta función tiene la firma:

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

Así que todo lo que necesita es proporcionar a sus parámetros como cadenas.
Otro ejemplo:

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

¡Guau! Formateo de estilo C# en haskell. ¡Buen trabajo, Dmitry! y bienvenidos a stackoverflow! –

+4

Recomendaría/no/usaría ese paquete, ya que está muy limitado en lo que puede hacer. Estoy trabajando en un paquete llamado [text-format] (http://hackage.haskell.org/package/text-format), que generalmente es más capaz y ya es bastante útil para este propósito. –

+0

Dmitry, todos los paquetes que se incluyen excepto para la doble conversión están incluidos en la Plataforma Haskell. La gran mayoría de los usuarios no tendrán que instalar tanto. Tu argumento aún es válido. –

6

Poner respuesta aquí por si alguien busca para dar formato a las bibliotecas de Haskell en StackOverflow. Ahora hay una biblioteca de formato rápido y segura para tipos llamada fmt. Con él se puede escribir código como este:

> "There are "+|n|+" million bicycles in "+|city|+"." 
Cuestiones relacionadas