LINUX.ORG.RU

[haskell] IO String -> Int?

 


0

0

Нашёл тут немного свободного времени и реши поиграть в Хаскель. Есть чисто задача прочитать из файла Int и что-то с ним сделать. Читаю файл и получаю IO String. Могу ли я получить из него Int (или String)? С другой стороны файл из которого я произвожу чтение измениться не может. Есть ли возможность, зная это, вообще избавится от IO в данном случае?

★★★★★

Есть ли возможность, зная это, вообще избавится от IO в данном случае?

От IO можно избавиться - unsafePerformIO :-) Но тебе этого не надо:

transformStr :: String -> String
transformStr = ...

readStringFromFile :: IO String
readStringFromFile = ...

main = do s <- readStringFromFile -- тут тип s - String
          let s' = transformStr s

Т.е. полностью разделяются ввод/вывод и преобразования считанных значений.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Я исходный пример не совсем правильно написал do должно заканчиваться выражение типа m a (т.е. не конструкцией a <- b или let a = b).

Begemoth ★★★★★
()
Ответ на: комментарий от KblCb

Но что порочного в этом желании?

попытка выдать процедуру за функцию; хочешь играть честно - используй ST или IO

jtootf ★★★★★
()
Ответ на: комментарий от KblCb

А чем плоха подобная попытка в моём случае?

Неопределённостью того как отложенные вычисления совместятся с вводом/выводом.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Хм… В общем виде мне подобная неопределённость понятна, но в конкретном случае значение в файле за время жизни программы поменяться не может. То есть когда бы ни было произведено чтение результат гарантирован один и тот же.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

значение в файле за время жизни программы поменяться не может

у тебя есть выбор: либо пользоваться системой типов, эффективно разделяя чистые и IO-операции; либо отказаться от системы типов и вести учёт гарантий самостоятельно (самостоятельно утверждать, что может поменяться, а что не может). во втором случае (который вполне имеет право на жизнь) в качестве языка лучше брать не Haskell

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>> во втором случае (который вполне имеет право на жизнь) в качестве языка лучше брать не Haskell

Не во втором, а в единственном.

cathode
()
Ответ на: комментарий от cathode

Не во втором, а в единственном.

конечно-конечно, не волнуйся. галоперидол сегодня ещё не принимал?

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.