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
>