理解这个信号代码
Understanding this signal code
我从昨天开始阅读这段代码并试图提出一个合理的解释,请你检查我的假设是否正确。
此代码来自here.
port requests : Signal (Task x ())
port requests =
Signal.map lookupZipCode query.signal
|> Signal.map (\task -> Task.toResult task `andThen` Signal.send results.address)
第1行定义了一个端口,是returns一个Signal
,由一个Task
,一个由x
标识的类型和一个空值组成(这不对我来说很有意义,我想这是完全错误的)。
第 4 行和第 5 行使用前向函数应用程序构造,因此第 4 行的结果作为参数传递给第 5 行,但这些行中具体发生了什么?
要了解函数式响应式编程,我正在阅读 this post 这是一个很好的资源吗?
我已经阅读了有关信号的文档,但我无法真正理解这里的要点。非常感谢用简单的英语和示例进行解释,非常感谢任何帮助我的人!
A port
是 Elm 与 JS 世界沟通的方式。
Signal (Task x ())
表示这是具有错误类型 x
和 return a Unit
的任务信号
第二行定义了端口,它基本上意味着这个端口将用于与 JS 的通信,而不是来自 JS 的通信。
如果我们查看 lookupZipCode
的定义,我们可以看到它需要一个 String
和 return 一个 Task String (List String)
。查看它的代码,我可以看到它将对查询字符串执行一个 Http 请求,并且 return 一个字符串类型的错误或一个字符串列表(城镇名称列表)。
因此 Signal.map lookupZipCode query.signal
生成这些任务的信号,询问邮政编码服务器。
在接下来的Signal.map中,我们将上述任务转换为:
- 错误和 http 查询的结果在 Result 类型中连接在一起。 (这意味着新任务永远不会失败)。
andThen
此结果类型将被发送到 results.address
。
在 JS 领域实际发送执行的结果任务将没有错误(这就是为什么你在那里看到 x 的原因)并且会产生单元类型(这是 Signal.send 的签名).
当 Task 在 JS 中实际执行时,执行结果将以 results.address 作为 Result 类型结束。
我从昨天开始阅读这段代码并试图提出一个合理的解释,请你检查我的假设是否正确。
此代码来自here.
port requests : Signal (Task x ())
port requests =
Signal.map lookupZipCode query.signal
|> Signal.map (\task -> Task.toResult task `andThen` Signal.send results.address)
第1行定义了一个端口,是returns一个Signal
,由一个Task
,一个由x
标识的类型和一个空值组成(这不对我来说很有意义,我想这是完全错误的)。
第 4 行和第 5 行使用前向函数应用程序构造,因此第 4 行的结果作为参数传递给第 5 行,但这些行中具体发生了什么?
要了解函数式响应式编程,我正在阅读 this post 这是一个很好的资源吗?
我已经阅读了有关信号的文档,但我无法真正理解这里的要点。非常感谢用简单的英语和示例进行解释,非常感谢任何帮助我的人!
A port
是 Elm 与 JS 世界沟通的方式。
Signal (Task x ())
表示这是具有错误类型 x
和 return a Unit
第二行定义了端口,它基本上意味着这个端口将用于与 JS 的通信,而不是来自 JS 的通信。
如果我们查看 lookupZipCode
的定义,我们可以看到它需要一个 String
和 return 一个 Task String (List String)
。查看它的代码,我可以看到它将对查询字符串执行一个 Http 请求,并且 return 一个字符串类型的错误或一个字符串列表(城镇名称列表)。
因此 Signal.map lookupZipCode query.signal
生成这些任务的信号,询问邮政编码服务器。
在接下来的Signal.map中,我们将上述任务转换为:
- 错误和 http 查询的结果在 Result 类型中连接在一起。 (这意味着新任务永远不会失败)。
andThen
此结果类型将被发送到results.address
。
在 JS 领域实际发送执行的结果任务将没有错误(这就是为什么你在那里看到 x 的原因)并且会产生单元类型(这是 Signal.send 的签名).
当 Task 在 JS 中实际执行时,执行结果将以 results.address 作为 Result 类型结束。