- コンパイルを待つなんて生産性が低い!
- 通らないコード片のエラーなんか知らない!
えっ?!まだ静的型検査してコンパイルしてるの?
デキるプログラマーは動的型検査!インタープリット!
main = do input <- readLn if input < 10 then putStrLn "Hi" else putStrLn ("Bad" + input)
このコードを実行するにはどうしてる?まさかこうしてる?
> ghc main.hs main.hs:5:21: error: • No instance for (Num [Char]) arising from a use of ‘+’ • In the second argument of ‘($)’, namely ‘"Bad" + input’ In the expression: putStrLn $ "bad" + input In a stmt of a 'do' block: if input < 10 then putStrLn "Hi" else putStrLn $ "Bad" + input | 5 | else putStrLn $ "Bad" + input |
うーん、input
が10か10より大きいと確かに "Bad" + input
でエラーになるね。でも、input
が10より小さいと?大丈夫じゃん!動かしちゃおうよ!
どうするかって?こうするんだよ!
> ghc -fdefer-type-errors -Wno-deferred-type-errors main.hs [1 of 1] Compiling Main ( main.hs, main.o ) Linking main.exe ... > .\main 9 Hi
やったぜ!
でもリンクの時間が長くない?そのまま動かした方がよくない?いいよね!
> runghc --ghc-arg=-fdefer-type-errors --ghc-arg=-Wno-deferred-type-errors main.hs 9 Hi
ばっちりだ!
みんなも動的型付けインタープリター言語である Haskell をやっていこうな!