計算機科学のブログ

HaskellのI/O コマンドラインの操作と遅延I/O コマンドライン操作:遅延評価を使用しない方法 mapM関数によるreplicateM関数の実装

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT4(HaskellのI/O)、LESSON22(コマンドラインの操作と遅延I/O)、22.1(コマンドライン操作:遅延評価を使用しない方法)、クイックチェック 22-2の解答を求めてみる。

コード

myReplicateM :: (Monad m, Num a, Enum a) => a -> m b -> m [b]
myReplicateM n f = mapM (\_ -> f) [1 .. n]

main = do
  ns <- myReplicateM 10 getLine
  print $ sum $ map read ns

入出力結果(Terminal, Zsh)

% runghc sample02.hs 
10
1
9
2
8
3
7
4
6
5
55
%