Есть ли у Фреге эквивалент 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
Подробнее см. Ответ Инго ниже.