Haskell: Conversion d'Int en chaîne

198

Je sais que vous pouvez convertir un Stringnombre en read:

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

Mais comment saisir la Stringreprésentation d'une Intvaleur?

Squirrelsama
la source

Réponses:

286

L'opposé de readest show.

Prelude> show 3
"3"

Prelude> read $ show 3 :: Int
3
Mandrin
la source
38
@Lega: Vous pouvez trouver cela utile: haskell.org/hoogle/?hoogle=Int+-%3E+String .
kennytm
3
@ KennyTM Beaucoup de gens trouveront ce lien utile! Un lien seul est +1, mais pour montrer comment l'utiliser ... C'est +10 Merci :)
CoR
Notez que certaines organisations / normes déconseillent fortement l'utilisation de "show" en raison de son polymorphisme extrême. Une fonction spécifique au type (ou, dans le pire des cas, un wrapper autour de show) serait utile.
Jon Watte
@JonWatte "Pourrait", pas "pourrait". Au niveau de la généralité de cette question, je ne pense pas que votre suggestion soit réalisable.
duplode
Existe-t-il un moyen de le faire manuellement sans utiliser les fonctions système?
lesolorzanov
4

Un exemple basé sur la réponse de Chuck:

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

Notez que sans la showtroisième ligne ne sera pas compilée.

prasad_
la source
4

Quiconque commence par Haskell et essaie d'imprimer un Int, utilise:

module Lib
    ( someFunc
    ) where

someFunc :: IO ()
x = 123
someFunc = putStrLn (show x)
Arlind
la source