问题标签 [tagless-final]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

scala - 将 F[A] 转换为 Future[A]

我有一个存储库:

我有一个使用 Cats IO 的数据库实现,所以我有一个CustomerRepoPostgres[IO].

现在,我想使用一个不能处理任意持有者类型的库(它只支持Future)。所以我需要一个CustomerRepoPostgres[Future].

我想写一些可以将我转换为的桥接CustomerRepoPostgres[IO]代码CustomerRepoPostgres[Future]

我不喜欢这种方法对存储库中使用的每种类型都需要隐式转换器。有一个更好的方法吗?

0 投票
0 回答
162 浏览

types - 在 idris 的最终无标签中出现故障编码系统 f omega

所以我正在尝试以最终的无标签风格做 system f omega。我已经成功地对系统 f 进行了编码,如下代码(还给出了一些示例)(另外,请忽略推理不起作用并且示例非常丑陋的事实,我将在单独的问题中询问它们):

但我在做 F omega 时遇到了麻烦。

所以我的问题是,如何解决它?似乎我可以在 lambda 类型上显式添加 beta 相等性(如 Idris Eq),并让用户使用它来重写 beta 缩减。

但是,我希望它自动完成。我的选择是什么?

0 投票
1 回答
63 浏览

scala - 上下文感知类型类

我正在开发一些适用于硬盘上文件的应用程序。我有以下“实体”:

我还有以下类型类:

所有这些都由以下特征操作:

而且看起来还不错。但我决定重构它并应用无标签最终。所以模型现在看起来像:

让我困惑的问题是 typeclass trait Checksum[F[_], T]。现在取决于上下文F。那真的是一个类型类吗?还是我看错了方向?

0 投票
1 回答
142 浏览

scala - 高级类型和无标签决赛

我正在尝试编写一个可以采用任何无标签最终特征并返回的函数F[String]

我不明白为什么上面没有编译。

以下作品。

但是我怎样才能摆脱这种特质呢?

0 投票
1 回答
376 浏览

monads - Scala Cats:用于任务 [Validated[String,?] 的 Monad 实例的尾递归 tailRecM 方法

cats中,当Monad使用 trait 创建a 时,理想情况下应提供Monad方法的尾递归实现以确保堆栈安全。tailRecM

我正在使用无标记的最终方法,并希望对我的程序产生Task[Validated[String, ?]](Monix ) 的效果。Task

我不知道如何编写尾递归实现。我的非尾递归解决方案是:

0 投票
1 回答
98 浏览

scala - Scala 中的无标记最后一个示例需要多余的第二个 interp arg

根据这篇用 Haskell 编写的博客文章,我正在尝试在 Scala 中实现一个无标签的最终 DSL 和解释器。

我可以运行一个示例 - 请参见下面的代码,但我不太明白我为什么需要testVal(Interp)(Interp). 如果我只提供一个Interp参数,那么我会得到以下编译错误:

有没有一种简单的方法来消除其中一个Interp论点?

0 投票
1 回答
185 浏览

scala - 带有无标签最终的类型类依赖

在观看了 John De Goes 的“FP to the Max”(https://www.youtube.com/watch?v=sxudIMiOo68)之后,我想知道以无标记最终模式编写 FP 程序的方法。

假设我有一些用于建模副作用的类型类(以他的Console例子):

你会怎么依赖Console

隐式

就像他的视频中展示的那样:

优点:函数签名很干净,您可以从 typeclass 自动派生中受益

明确地

通过将实例直接传递给函数:

优点:这使您可以根据需要明确连接依赖项,并且感觉不那么“神奇”

不确定编写此功能的最佳/最惯用的方法是什么,不胜感激。

谢谢!

0 投票
1 回答
134 浏览

scala - 无标签最终效果传播

tagless-final 模式让我们可以编写纯函数式程序,这些程序明确说明了它们需要的效果。

但是,扩展这种模式可能会变得具有挑战性。我将尝试用一个例子来证明这一点。想象一个简单的程序,它从数据库中读取记录并将它们打印到控制台。我们将需要一些自定义类型类DatabaseConsole,除了Monad来自猫/scalaz 来组合它们:

当我想为内层的函数添加新的效果时,问题就开始了。例如,read如果没有找到记录,我希望我的函数记录一条消息

但是现在,我必须将Logger约束添加到read链上的所有调用者。在这个人为的例子中,它只是main,但想象一下这是一个复杂的现实世界应用程序的几层。

我们可以从两个方面来看这个问题:

  1. 我们可以说明确我们的效果是一件好事,而且我们确切地知道每一层需要哪些效果
  2. 我们也可以说这泄露了实现细节——main不关心日志,它只需要read. 此外,在实际应用程序中,您会在顶层看到非常长的效果链。感觉就像是代码气味,但我无法确定我可以采取什么其他方法。

很想听听您对此的见解。

谢谢。

0 投票
2 回答
284 浏览

f# - 使用 SRTP 在 F# 中实现无标记最终编码

我想将我的 F# OOP 版本的 Tagless Final 转换为典型的 FP 方法,并且我正在考虑使用来自 OO的类型类的静态解析类型参数

我所做的是

创建我需要的 SRTP

以及它们的具体实现

通过它我可以定义一个无标签的最终 DSL

那种作品如下

问题是我收到警告

构造导致代码比类型注释所指示的更通用

对于两者cacheImpl1dataSourceImpl1所以我不能再requestData用于其他情况。有没有办法绕过这个问题?

0 投票
1 回答
382 浏览

scala - 无法制作简单的无标签最终示例

我读过关于无标签决赛的文章,我认为这很棒。我想建立我自己的这种模式的小例子并遇到了问题。

这是我的代码:

not found: value Calculator由于错误,此代码不起作用。我怎样才能正确地做到这一点?