HaskellでReplを作る
最小の実装
hsmodule 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
hsimport System.IO
read_ :: IO String
read_ = putStr "hytl> " >> hFlush stdout >> getLine
main :: IO ()
main = do
input <- read_
print input
flush
ってなに?
>>
ってなに?
アクションから値を取り出して、それを捨てて次のアクションを実行する感じ
hsa = 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
節を省略した関数
参考