问题 1
出于改善 haskell 编译时间的原因(无论是否使用底层功能,都会编译包含的任何模块),是否有任何工具可以警告 haskell 程序员包含不必要的模块?例如假设我们有以下设置:
必要模块1.hs
module NecessaryModule1 where
addNumber1 :: Int -> Int -> Int
addNumber1 a b = a + b
必要模块2.hs
module NecessaryModule2 where
addNumber2 :: Int -> Int -> Int
addNumber2 a b = a + b
测试.hs
module Test where
import NecessaryModule1
import NecessaryModule2
主文件
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更改为:
主文件
module Main where
--import Test
myadd :: Int->Int->Int
myadd a b = a + b
main::IO()
main = print(myadd 5 6)
然后可执行文件大小减少到 833057。鉴于 Test 模块的功能未在Main.hs中使用,为什么可执行文件大小有所不同?