Есть ли какой-либо эквивалент Frege для Haskell getLine
и read
для синтаксического анализа ввода с консоли в стандартной библиотеке?
В настоящее время я делаю это так:
import frege.IO
getLine :: IO String
getLine = do
isin <- stdin
isrin <- IO.InputStreamReader.new isin
brin <- IO.BufferedReader.fromISR isrin
line <- brin.readLine
return $ fromExceptionMaybe line
fromExceptionMaybe :: Exception (Maybe a) -> a
fromExceptionMaybe (Right (Just r)) = r
fromExceptionMaybe (Right _) = error "Parse error on input"
fromExceptionMaybe (Left l) = error l.getMessage
pure native parseInt java.lang.Integer.parseInt :: String -> Int
main _ = do
line <- getLine
println $ parseInt line
Обновление:
Frege развивается, так что теперь мы имеем getLine
в самой стандартной библиотеке. Что касается read
, у нас есть методы преобразования в String. Теперь исходная проблема просто,
main _ = do
line <- getLine
println line.atoi
Подробнее см. в Ingo ниже.