計算機科学のブログ

HaskellのI/O コマンドラインの操作と遅延I/O 標準入力、getContents関数、lines関数

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT4(HaskellのI/O)、LESSON22(コマンドラインの操作と遅延I/O)、22.4(練習問題)Q22-1の解答を求めてみる。

コード

calc :: [String] -> Double
calc [x, "+", y] = read x + read y
calc [x, "*", y] = read x * read y
calc _ = error "Invalid input"

main :: IO ()
main = do
  input <- getContents
  let ops = lines input
  print $ calc ops

入出力結果(Terminal, Zsh)

% runghc sample1.hs 
1.2
+
3.4
4.6
% runghc sample1.hs
1.2
*
3.4
4.08
% runghc sample1.hs
1.2
/
sample1.hs: Invalid input
CallStack (from HasCallStack):
  error, called at sample1.hs:4:10 in main:Main
%