带控制台/节点的 Elm 中的 Hello World

Hello World in Elm with console / Node

在 Elm 中是否有一种简单、受支持的方式来编写控制台应用程序,最好是在 Node 中?如果是这样,"Hello, World" 是什么样子的?

我知道有一些软件包,其中大部分显然没有得到维护,声称可以做这样的事情,但它们在某种程度上看起来都像是拼凑的。

从 0.18 开始,Elm 是一种仅限前端的语言。将来它可能对后端友好。但现在不是吗。参见 here

然而,这并不意味着您不能将它与 Node.js 一起使用。您只需要使用 "worker" 模式并通过端口将所有数据传入和传出。例如:

port module Main exposing (..)

import Platform

port getName : (String -> msg) -> Sub msg
port sendGreeting : String -> Cmd msg

type alias Model = {}

type Msg =
  GreetUser String

update msg model = 
  case msg of
    GreetUser name -> (model, sendGreeting name)

main = Platform.program 
  { init = ( {}, Cmd.none)
  , update = update
  , subscriptions = \model -> getName GreetUser
}

然后你可以通过 elm-make Main.elm --output elm.js 编译它,并像这样在 JS 中要求它:

const Elm = require("./elm.js");
const app = Elm.Main.worker();

app.ports.sendGreeting.subscribe((greeting) => console.log(greeting));

app.ports.getName.send("Noah")

有很多应用可以做到这一点,例如:

  • elm-sketch-importer
  • elm-verify-examples
  • 榆树分析
  • 榆树保险丝