Haskell: преобразование Int в строку

199

Я знаю, что вы можете конвертировать Stringв число с read:

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

Но как вы Stringполучаете представление Intзначения?

Squirrelsama
источник

Ответы:

287

Противоположностью readявляется show.

Prelude> show 3
"3"

Prelude> read $ show 3 :: Int
3
цыпленок
источник
38
@Lega: Вы можете найти это полезным: haskell.org/hoogle/?hoogle=Int+-%3E+String .
Kennytm
3
@ KennyTM Множество людей сочтут эту ссылку полезной! Только ссылка +1, но за то, как показать, как ее использовать ... Это +10 Спасибо :)
CoR
Обратите внимание, что некоторые организации / стандарты настоятельно не рекомендуют использовать «шоу» из-за его крайнего полиморфизма. Была бы полезна функция, специфичная для типа (или, в худшем случае, обертка вокруг шоу).
Джон Уотт
@JonWatte "Могу", а не "будет". На уровне общности этого вопроса, я не думаю, что ваше предложение является действенным.
дупло
Есть ли способ сделать это вручную без использования системных функций?
lesolorzanov
4

Пример, основанный на ответе Чака:

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

Обратите внимание, что без showтретьей строки не будет компилироваться.

prasad_
источник
4

Любой, кто только начинает с Haskell и пытается напечатать Int, использует:

module Lib
    ( someFunc
    ) where

someFunc :: IO ()
x = 123
someFunc = putStrLn (show x)
Arlind
источник