HaskellでReplを作る
最小の実装
code:hs
module Main where
import System.IO
import Control.Monad (unless)
main :: IO ()
main = do
input <- read_
unless (input == ":quit") $ print_ (eval_ input) >> main
read_ :: IO String
read_ = putStr "hytl> " >> hFlush stdout >> getLine
eval_ :: String -> String
eval_ input = input
print_ :: String -> IO ()
print_ = putStrLn
参考
Read
code:hs
import System.IO
read_ :: IO String
read_ = putStr "hytl> " >> hFlush stdout >> getLine
main :: IO ()
main = do
input <- read_
print input
flushってなに?
>>ってなに?
アクションから値を取り出して、それを捨てて次のアクションを実行する感じ
code:hs
a = do
_ <- print 1
print 2
a = print 1 >> print 2
こうなる
k >> f = k >>= \_ -> f
参考
unlessってなに
unless :: Applicative f => Bool -> f () -> f ()
if..then..elseのthen節を省略した関数
似たものにwhenもある
これはelse節を省略した関数
参考