generated at
HaskellでReplを作る

最小の実装
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


参考
この記事のリポジトリ ref github

Read
hs
import System.IO read_ :: IO String read_ = putStr "hytl> " >> hFlush stdout >> getLine main :: IO () main = do input <- read_ print input



flush ってなに?


>> ってなに?
アクションから値を取り出して、それを捨てて次のアクションを実行する感じ
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 節を省略した関数
参考



単純にSystem.Console.Haskelineをつかうという手もあるmrsekut