2013-12-18 3 views
5

Я делаю первые шаги в Haskell, и я пытаюсь преобразовать строку в целое число, но я не управляю. Я посмотрел на подобные вопросы, и я все еще не уверен.Haskell String-> Int Type Conversion

Все, что я хочу сделать, это преобразовать, например. '6' или "271" целыми числами, то есть 6 или 271 соответственно. Как мне это сделать?

Аналогом было бы то, что в Python я мог бы сделать это легко: например. int("2723") выполнит свою работу.

+2

Вы ищете [читать] (http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#v:read) – DiegoNolan

+2

Первый результат, если вы google "haskell string to int "- это столбец [stackoverflow] (http://stackoverflow.com/questions/2468410/convert-string-to-integer-float-in-haskell), объясняющий, как использовать' read'. – bheklilr

ответ

10

Если вы знаете, что строка является действительным целым числом, или вы не возражаете, чтобы это взорвалось, если это не так, read будет работать. Если вы не знакомы с классов типов в Haskell, просто знаю, что вы могли бы сказать, Haskell, какой тип вы хотите, чтобы прочитать его как:

main :: IO() 
main = do 
    let x = read "271" :: Integer 
    print x 

Вы не всегда должны сделать это, если Haskell имеет какой-то другой способ зная, какой тип вы хотите, например, если вы приступите к арифметике с ним.

Если вы не знаете наверняка, что строка является допустимым числом, последние версии базы (не обязательно с тех пор) включают функцию readMaybe, которая будет безопасно возвращать Nothing, если это не читаемое целое число.

+0

Спасибо, хотя мой вопрос является дубликатом, и ответ уже поставлен. Можете ли вы связать меня с ресурсом для другого? (Int -> String?) – Newb

+0

@Newb Для этого вы хотите ['show'] (http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#v:show). – Onyxite

+0

@Newb Противоположность 'read' -' show'. Большинство руководств охватывают эти функции довольно рано, на что вы смотрели до сих пор? лучше всего было бы поработать над несколькими, прежде чем пытаться погрузиться прямо. – bheklilr