Haskell: Konwersja tekstu na ciąg

199

Wiem, że możesz przekonwertować Stringliczbę na liczbę za pomocą read:

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

Ale jak zdobyć Stringreprezentację Intwartości?

Squirrelsama
źródło

Odpowiedzi:

286

Przeciwieństwem readjest show.

Prelude> show 3
"3"

Prelude> read $ show 3 :: Int
3
Głaskanie pod brodę
źródło
38
@Lega: Może Ci się to przydać: haskell.org/hoogle/?hoogle=Int+-%3E+String .
kennytm
3
@ KennyTM Wiele osób uzna ten link za użyteczny! Sam link ma +1, ale za pokazanie, jak go używać ... To +10 dzięki :)
KR
Zauważ, że niektóre organizacje / standardy zdecydowanie odradzają stosowanie „show” ze względu na jego ekstremalny polimorfizm. Pomocna byłaby funkcja specyficzna dla typu (lub, w najgorszym przypadku, zawijanie programu).
Jon Watte
@JonWatte „Might”, a nie „would”. Na poziomie ogólności tego pytania nie sądzę, aby twoja sugestia była wykonalna.
duplode
Czy można to zrobić ręcznie bez użycia funkcji systemowych?
lesolorzanov
4

Przykład oparty na odpowiedzi Chucka:

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

Zauważ, że bez showtrzeciego wiersza nie będzie się kompilować.

prasad_
źródło
4

Każdy, kto zaczyna od Haskell i próbuje wydrukować Int, użyj:

module Lib
    ( someFunc
    ) where

someFunc :: IO ()
x = 123
someFunc = putStrLn (show x)
Arlind
źródło