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?

Odpowiedzi:


286

Przeciwieństwem readjest show.

Prelude> show 3
"3"

Prelude> read $ show 3 :: Int
3

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ć.


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.