wvogel日記

自分用の技術備忘録が多めです.

実行順序???

最近Haskellで書いていないので。
とりあえず書いてみた

main = do n <- getLine  
          cs <- getContents
          print.sum.map read.take (read n)$words cs

Applicativeを使ってdoを排除して書きたかったけど、

import Control.Applicative

print' :: String -> String -> IO ()
print' n = print.sum.map read.take (read n).words

main =print' <$>getLine<*>getContents

とすると、getLineとgetContentsが同時に評価されるのかな?
実行順序がよくわからないけれど、一つ入力したらそれでプログラムが終了してしまう。
これは、getLineを評価してからgetContentsを実行したいのに、実際はそうはなっていないことなんでしょうか?


うーん......