gpt4 book ai didi

haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?

转载 作者:行者123 更新时间:2023-12-02 01:18:40 26 4
gpt4 key购买 nike

我想学习这个概念,以便能够理解和使用 machines 等库。 .

我试着关注 Rúnar Bjarnason's talk on machines ,但是资料太少,基本上就是一堆数据类型。我什至无法理解 k

newtype Machine k o = Step k o (Machine k o)
data Step k o r = Stop
| Yield o r
| forall t . Await (t -> r) (k t) r

或者什么是 t是以及为什么要量化。或者,类似管道的库和机器之间的概念区别是什么?

最佳答案

conduitpipes都比 machines 成熟得多, 但是 -- 那就是 -- machines正试图采用与 conduit 不同的路径和 pipes .

machines ,我正在尝试在类型参数方面相对简单的 API。两个conduitpipes已经选择通过使用 5-6 个不同的类型变量参数来统一他们的所有概念。

Machines 采用不同的方法对机器(或 Plan )的“输入语言”进行参数化,这将所有责任放在一个额外的参数上(或在 Plan 的情况下为两个)。此外,通过选择以这种方式参数化输入语言,它开辟了使用可以从多个输入源(非)确定性地接受输入的机器的可能性。结果基本上只是一个带有额外“发射”指令的免费单子(monad)!

作为对如何构建和使用机器的更严格政策的交换,它最终可以为结果代码的渐近提供更好的安全性。

也就是说,pipesconduit有很多现实世界的使用和machines对我来说,或多或少是一个游乐场,Rúnar Bjarnason 和 Paul Chiusano。

它目前适用于处理您打算完全使用的输入,但与使用其他两个 API 获得的相比,它不太适合处理复杂的资源或解析。

现在,关于那个量词!
t实际上存在量化。通过这样做,我们可以制作 Monad对于不关心 k 功能性的机器范围。这很重要,因为 Source 的方式被实现。如果我不需要 Source工作,那么我们可以使用更简单的

data Step k o r = Stop
| Yield o r
| Await (k r) r

这将产生不幸的副作用,当您使用 Source 组合机器时,编译器不知道 Functor要选择的实例,您将在不必要的类型注释中游泳。

存在量化是我在处理 kan-extensions 时学到的一个技巧包裹。它是 Yoneda 之一的概括。类型从那里。

关于haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com