Haskell: Convertendo Int em String

198

Eu sei que você pode converter um Stringem um número com read:

Prelude> read "3" :: Int
3
Prelude> read "3" :: Double 
3.0

Mas como você pega a Stringrepresentação de um Intvalor?

Squirrelsama
fonte

Respostas:

286

O oposto de readé show.

Prelude> show 3
"3"

Prelude> read $ show 3 :: Int
3
Mandril
fonte
38
@Lega: Você pode achar isso útil: haskell.org/hoogle/?hoogle=Int+-%3E+String .
Kennytm
3
@ KennyTM Muitas pessoas acharão esse link útil! Apenas um link é +1, mas para mostrar como usá-lo ... Isso é +10 Obrigado :) #
860
Observe que algumas organizações / padrões desencorajam fortemente o uso de "show" devido ao seu polimorfismo extremo. Uma função específica do tipo (ou, na pior das hipóteses, wrapper em torno do show) seria útil.
Jon Watte
@ JonWatte "Pode", não "faria". No nível de generalidade desta pergunta, não acho que sua sugestão seja acionável.
Duplode
Existe uma maneira de fazer isso manualmente sem usar as funções do sistema?
### lesolorzanov #
4

Um exemplo baseado na resposta de Chuck:

myIntToStr :: Int -> String
myIntToStr x
    | x < 3     = show x ++ " is less than three"
    | otherwise = "normal"

Observe que sem a showterceira linha não será compilada.

prasad_
fonte
4

Qualquer um que esteja começando com Haskell e tentando imprimir um Int, use:

module Lib
    ( someFunc
    ) where

someFunc :: IO ()
x = 123
someFunc = putStrLn (show x)
Arlind
fonte