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
%