質問1
haskell のコンパイル時間を改善する理由 (基本的な機能が使用されているかどうかに関係なく、含まれているモジュールはコンパイルされます) で、不要なモジュールが含まれていることを haskell プログラマーに警告するツールはありますか? たとえば、次の設定があるとします。
必要なModule1.hs
module NecessaryModule1 where
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
必要なModule2.hs
module NecessaryModule2 where
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
Test.hs
module Test where
import NecessaryModule1
import NecessaryModule2
Main.hs
module Main where
import Test
myadd :: Int->Int->Int
myadd a b = a + b
main::IO()
main = print(myadd 5 6)
次に、そのようなツールは、に不要なモジュールがあることを警告します。
- Main.hs : Test の機能を使用しないため
- Test.hs : NecessaryModule1 と NecessaryModule2 の機能が使用されていないため
質問2
上記のコードを次のようにコンパイルすると:
ghc -o testProg Main.hs
次に、833504 バイトの実行可能サイズを取得します。ただし、Main.hsを次のように変更すると:
Main.hs
module Main where
--import Test
myadd :: Int->Int->Int
myadd a b = a + b
main::IO()
main = print(myadd 5 6)
Test モジュールの機能がMain.hsで使用されていない場合、実行可能ファイルのサイズに違いがあるのはなぜですか?