Elm 理解这个信号代码

Elm 理解这个信号代码,elm,elm-signal,Elm,Elm Signal,我从昨天开始就在读这段代码,试图给出一个合理的解释,你能检查一下我的假设是否正确吗 此代码来自 第1行定义了一个端口,它返回一个信号,该信号由一个任务、一个由x标识的类型和一个空值组成(这对我来说没有意义,我想这是完全错误的) 第4行和第5行使用了forward函数应用程序构造,因此第4行的结果作为参数传递给第5行,但是在这些行中详细发生了什么 为了学习函数式反应式编程,我正在学习它是一个很好的资源吗 我已经阅读了有关信号的文档,但我不能真正理解这一点。如果您能用简单的英语解释并举例说明,我将不

我从昨天开始就在读这段代码,试图给出一个合理的解释,你能检查一下我的假设是否正确吗

此代码来自

第1行定义了一个端口,它返回一个
信号
,该信号由一个
任务
、一个由
x
标识的类型和一个空值组成(这对我来说没有意义,我想这是完全错误的)

第4行和第5行使用了forward函数应用程序构造,因此第4行的结果作为参数传递给第5行,但是在这些行中详细发生了什么

为了学习函数式反应式编程,我正在学习它是一个很好的资源吗


我已经阅读了有关信号的文档,但我不能真正理解这一点。如果您能用简单的英语解释并举例说明,我将不胜感激,非常感谢任何愿意帮助我的人

A
port
是Elm与JS世界通信的方式

Signal(Task x())
表示任务的信号具有错误类型
x
,并返回

第二行定义了端口,它基本上意味着该端口将用于与JS通信,而不是与JS通信

如果我们看一下
lookupZipCode
的定义,我们可以看到它使用
字符串
,并返回
任务字符串(列表字符串)
。查看它的代码,我可以看到它将对查询字符串执行Http请求,并返回字符串类型的错误或字符串列表(城镇名称列表)

因此,
Signal.map lookupZipCode query.Signal
生成这些任务的信号,这些任务将询问zipcode服务器

在下一个Signal.map中,我们执行上述任务并将其转换为:

  • http查询的错误和结果在结果类型中连接在一起。(这意味着新任务永远不会失败)
  • 然后
    此结果类型将发送到
    结果地址
    在JS land中实际发送执行的结果任务将没有错误(这就是为什么您在那里看到x),并将生成单元类型(这是Signal.send的签名)


    当任务在JS中实际执行时,执行的结果将以results.address作为结果类型结束

    A
    port
    是Elm与JS世界通信的方式

    Signal(Task x())
    表示任务的信号具有错误类型
    x
    ,并返回

    第二行定义了端口,它基本上意味着该端口将用于与JS通信,而不是与JS通信

    如果我们看一下
    lookupZipCode
    的定义,我们可以看到它使用
    字符串
    ,并返回
    任务字符串(列表字符串)
    。查看它的代码,我可以看到它将对查询字符串执行Http请求,并返回字符串类型的错误或字符串列表(城镇名称列表)

    因此,
    Signal.map lookupZipCode query.Signal
    生成这些任务的信号,这些任务将询问zipcode服务器

    在下一个Signal.map中,我们执行上述任务并将其转换为:

  • http查询的错误和结果在结果类型中连接在一起。(这意味着新任务永远不会失败)
  • 然后
    此结果类型将发送到
    结果地址
    在JS land中实际发送执行的结果任务将没有错误(这就是为什么您在那里看到x),并将生成单元类型(这是Signal.send的签名)

    当任务在JS中实际执行时,执行的结果将以results.address作为结果类型结束

    比你还多!比你还多!
    port requests : Signal (Task x ())
    port requests =
      Signal.map lookupZipCode query.signal
        |> Signal.map (\task -> Task.toResult task `andThen` Signal.send results.address)