REPL

瞭解 Elm 的一個好方法是嘗試在 REPL(Read-Eval-Print Loop)中編寫一些表示式。在 elm-app 資料夾中開啟一個控制檯(你已在初始化和構建階段建立 )並嘗試以下操作:

$ elm repl
---- elm-repl 0.17.1 -----------------------------------------------------------
 :help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>> 2 + 2
4 : number
> \x -> x
<function> : a -> a
> (\x -> x + x)
<function> : number -> number
> (\x -> x + x) 2
4 : number
>

elm-repl 實際上是一個非常強大的工具。假設你使用以下程式碼在 elm-app 資料夾中建立 Test.elm 檔案:

module Test exposing (..)

a = 1

b = "Hello"

現在,你回到你的 REPL(已經開啟)並輸入:

import Test exposing (..)
> a
1 : number
> b
"Hello" : String
>

更令人印象深刻的是,如果你為 Test.elm 檔案新增新定義,例如

s = """
Hello,
Goodbye.
"""

儲存檔案,再次返回 REPL,無需再次匯入 Test,新的定義立即可用:

> s
"\nHello,\nGoodbye.\n" : String
>

當你想要編寫跨越多行的表示式時,這非常方便。快速測試剛剛定義的函式也非常有用。將以下內容新增到你的檔案中:

f x =
  x + x * x

儲存並返回 REPL:

> f
<function> : number -> number
> f 2
6 : number
> f 4
20 : number
>

每次修改並儲存已匯入的檔案,然後返回 REPL 並嘗試執行任何操作時,將重新編譯完整檔案。因此,它會告訴你程式碼中的任何錯誤。新增這個:

c = 2 ++ 2

試試看:

> 0
-- TYPE MISMATCH -------------------------------------------------- ././Test.elm

The left argument of (++) is causing a type mismatch.

22|     2 ++ 2
        ^
(++) is expecting the left argument to be a:

    appendable

But the left argument is:

    number

Hint: Only strings, text, and lists are appendable.

> 

總結一下 REPL 的這個介紹,讓我們補充一點,elm-repl 也知道你用 elm package install 安裝的軟體包。例如:

> import Html.App
> Html.App.beginnerProgram
<function>
    : { model : a, update : b -> a -> a, view : a -> Html.Html b }
      -> Platform.Program Basics.Never
>