Haskell/獨立程式
讓我們構建一個簡單的 Haskell 應用程式,即一個獨立的軟體。
其背後的基本要求是擁有一個名為 Main 的模組,該模組具有一個名為 main 且型別為 IO () 的入口點。
-- thingamie.hs
module Main where
main = putStrLn "Bonjour, world!"
我們已經知道如何將它載入到 GHCi 中,但這裡是如何編譯它並獨立執行它
$ ghc --make -o bonjourWorld thingamie.hs $ ./bonjourWorld Bonjour, world!
瞧!你現在擁有一個用 Haskell 構建的獨立應用程式。
大多數程式會變得足夠複雜,需要拆分到不同的檔案中。這是一個使用兩個模組的應用程式的玩具示例。
-- Hello.hs
module Hello where
hello = "Bonjour, world!"
-- thingamie.hs
module Main where
import Hello
main = putStrLn hello
我們可以像以前一樣編譯這個新程式。這個--make標誌告訴 GHC 自動檢測您正在編譯的檔案中的依賴項。也就是說,由於thingamie.hs匯入了一個模組 Hello,GHC 將在當前目錄中的 Haskell 檔案中搜索實現 Hello 的檔案,並同時編譯它們。如果 Hello 依賴於其他模組,GHC 將自動檢測這些依賴項。
$ ghc --make -o bonjourWorld thingamie.hs $ ./bonjourWorld Bonjour, world!
您可能已經注意到,帶有 Main 模組的檔案thingamie.hs,沒有與模組名稱匹配的名稱,這與我們在 模組 章節中所說的相悖。這不是問題,因為模組和檔名匹配的目的是讓 GHC 自動找到這些檔案。由於這個過程總是從 Main 開始,我們在呼叫 GHC 時在命令列中指定了它的檔案,因此 Main 模組的檔案不需要遵循約定。
如果您想在其他地方搜尋原始檔(包括檔案和目錄的巢狀結構),您可以使用-i標誌新增依賴搜尋的起點。此標誌接受以冒號分隔的多個目錄名稱作為其引數。
作為一個人為的示例,以下程式有三個檔案,它們都儲存在一個src/目錄中。目錄結構如下
HaskellProgram/
src/
Main.hs
GUI/
Interface.hs
Functions/
Mathematics.hs
Main 模組透過搜尋類似於模組名稱的路徑來匯入它的依賴項——因此 import GUI.Interface 將搜尋GUI/Interface(帶有適當的副檔名)。
要從 HaskellProgram 目錄中編譯此程式,請使用以下命令呼叫 GHC
$ ghc --make -isrc -o sillyprog Main.hs