Haskell 除了編譯,也提供 REPL 與 Script

GHC 是 Haskell 最有名的 compiler,除了可編譯 Haskell 外,還提供了 REPL 與 Script 模式,讓我們甚至可以直接寫 Haskell Script,非常有趣。

Version


macOS High Sierra 10.13.6
GHC 8.4.3

安裝 GHC


1
$ brew install ghc

使用 Homebew 安裝 GHC。

REPL 執行 Haskell


修改 Prompt

預設 prompt 為 Prelude>,可自行修改成 ghci>

.ghci

1
:set prompt "ghci> "

在 home directory 建立 .ghci,設定 prompt 為 ghci

ghc000

執行 GHCi

1
$ ghci

輸入 ghci 執行 GHC 的 REPL 模式。

ghc001

  1. 輸入 ghci
  2. 在 REPL 模式輸入 putStrLn "Hello World" 顯示 Hello World

離開 GHCi

1
ghci> :quit

輸入 :quit 離開 GHCi。

ghc002

編譯執行 Haskell


GHC 可將 Haskell 編譯成執行檔執行。

建立 Hello World

hello-world.hs

1
main = putStrLn "Hello World"

以 Haskell 印出簡單的 Hello World

GHC 編譯

1
$ ghc -o hello-world ./hello-world.hs

使用 ghc 編譯 hello-world.hs

  • -o : o utput 執行檔的檔名

ghc003

ghc004

  1. 編譯出 hello-world 執行檔,也一併編譯出 .hi.hs.o 等中間檔

執行 Hello World

1
$ ./hello-world

直接執行 hello-world 執行檔。

ghc005

Script 執行 Haskell


Haskell 也可以不用編譯,直接以 Script 形式執行。

建立 Hello World Script

hello-world.hs

1
2
3
#!/usr/bin/env runghc --

main = putStrLn "Hello World"

ghc006

設定執行權限

Script 要能執行,必須先設定其有被執行權限。

1
$ chmod +x hello-world.hs

使用 chmod 設定 hello-world.hs 能被執行。

ghc007

  1. 紅色 代表有執行權限。

執行 Hello World Script

1
$ ./hello-world.hs

直接執行 hello-world.hs

ghc008

為了證明 GHC 沒有偷偷編譯,我們來看一下目前目錄。

ghc009

  1. 仍然只有 hello-world.hs,證明 GHC 沒有偷偷編譯再執行

Conclusion


  • Haskell 除了可編譯外,尚提供 REPL 與 Script
  • 尤其是 Haskell Script,讓 Haskell 的可用性又更上一層樓
2018-08-18