HaskellのI/O - コマンドラインの操作と遅延I/O - 遅延評価を使用しない方法 - replicateMの独自の実装, mapM
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT4(HaskellのI/O)、LESSON 22(コマンドラインの操作と遅延I/O)、22.1(コマンドラインの操作:遅延評価を使用しない方法)、クイックチェック 22-2の解答を求めてみる。
コード
sample2.hs
import System.Environment
main :: IO ()
main = do
args <- getArgs
let linesToRead =
if not (null args)
then read (head args)
else 0
numbers <- myReplicateM linesToRead getLine
let ints = map read numbers
print $ sum ints
myReplicateM :: (Monad m) => Int -> m a -> m [a]
myReplicateM n func = mapM (\_ -> func) [1 .. n]
入出力結果(Terminal, Zsh)
% runghc sample2.hs 2
4
59
63
% runghc sample2.hs 4
1
2
3
410
416
%