问题标签 [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 回答
131 浏览

scala - 第一个最终的无标签方法

我正在尝试在 Scala 中使用第一次无标记最终模式并且有点挣扎。

我有以下代数定义:

和口译员的实施:

我想做的是,Environment组成DbSystemEnvironment. 这里的问题是,我无法从中获取价值,因为我对inenv.get(url)什么都不知道,除了它是一个. 如何从中获取价值?FDbSystemEnvironmentMonadErrorenv.get(url)::F[Option[String]]

另外,如果在函数中env.get(url)返回,那么它应该返回。NothingreadMonadError

0 投票
1 回答
80 浏览

scala - 为无标签代数编写法律或单元测试

我已经写了两个无标签代数,我想为其中一个写定律。

代数如下:

口译员如下:

在函数式编程中,有 Monoid、Monads 等规律。

我的问题是:

  1. 我的代数是否需要法律或编写单元测试就足够了?
  2. 法律和单元测试有什么区别?
  3. 我应该如何写DbConnector代数定律
0 投票
1 回答
89 浏览

scala - 如何为我的无标记代数编写单元测试?

我有一个代数解释器,我想为它编写一个单元测试。

解释器如下:

代数如下:

实施如下:

我使用测试框架https://scalameta.org/munit/

如何为我的上述代数编写单元测试?

0 投票
1 回答
75 浏览

scala - 无标签代数需要定律吗?

我阅读了JOHN A DE GOES 关于无标签决赛的精彩博客。在 5.Fake Abstraction 一节中,他提到:

不幸的是,这些运算不满足任何代数定律——不满足!这意味着当我们编写多态代码时,我们无法对 putStrLn 和 getStrLn 进行一般推理。

据我们所知,这些操作可能是启动线程、创建或删除文件、按顺序运行大量单独的副作用等等。

他对应于以下无标记代数:

这是否意味着不可能为无标签代数编写定律,或者我是否误解了某些东西。

0 投票
2 回答
302 浏览

scala - 如何在抽象效果类型上配置 Cats Timer

假设我在使用无标记Cats-effect最终方法的项目中有以下方法签名:

我正在尝试schedule使用纯 FP 对方法调用安排操作。

我试过这样:

但它没有用,因为效果 println("tick")Timer初始化阶段执行。

我怎样才能让它正常工作?

我还可以创建某种递归构造,以便每 10 秒重复一次我的预定操作吗?

0 投票
1 回答
486 浏览

scala - Intellij IDEA 无法解析隐含符号(scala tagless final)

我有一些使用无标记最终方法的代码,发现 Intellij IDEA 无法识别隐式类中的方法。

我这里有一些类型类(Functor,ApplyApplicative),还有一个implicit class FunctorOps带有一些辅助方法的Functor. 此代码编译但 IDEA 找不到voidimplicit Applicative. 查看错误:

无法解析符号 void:44

没有类型的隐式参数:Applicative[F_]:51

代码看起来不太难:

我的问题:有什么方法可以避免在 IDEA 中出现这个错误,或者最好将VS CodeMetals或其他东西一起使用?无标签final是否有更好的效果?

我使用 std lib 并在 sbt 中添加编译器插件以使用F点方法语法:

addCompilerPlugin("org.augustjune" %% "context-applied" % "0.1.4")

scastie 中带有构建参数的代码

截图:

在此处输入图像描述

在此处输入图像描述

我的环境:

  • Intellij IDEA版本2020.2.3(带有最后一个稳定的scala 插件

  • 操作系统:MacOS Catalina 10.15.7

0 投票
2 回答
130 浏览

scala - 在 Http4s API 中将 `Option[A]` 转换为 Ok() 或 NotFound()

我有一个如下所示的 API:

和一个看起来像这样的路由:

因此,当有 时None,它会转换为 404。由于有多个路由,因此.flatMap { ... }会重复。

问题:如何将其移动到.orNotFound特定于我的项目的单独帮助函数中?


我的尝试:

为了让我的事情变得简单(并避免F最初的参数化),我试图在里面定义这个comicsRoutes

但是???这里有什么?似乎不是ResponseStatus。此外,它.flatMap { ... }是在 下制作的import dsl._,但我想把它移到更远的地方。什么是好地方?它是进入路由文件,还是我把它放在一个单独的ExtendedSomething扩展文件中?(我希望这可能是相关的???Something但我对缺少的类型有点困惑。)

(同样重要的是,我如何找出???这里有什么?我希望???在类型级别可以给我一个“类型漏洞”,而 VSCode 的悬停功能提供了非常零星的文档价值。)

0 投票
1 回答
214 浏览

typescript - 将 Task[Either] 和 IO[Either] 表示为包含 tryCatch 的单个 monad?

有没有办法将 IOEither 和 TaskEither 表示为一个也包括tryCatch?

我目前将通过 HTTP 使用 API,因此使用 TaskEither 是有意义的,但预计此代码将“离家更近”迁移,并且在那时将其设为有意义IOEither。所以我想写一个无标签风格的消费者界面

到目前为止,一切都很好!然而,虽然有一个tryCatchfor Option、Either、TaskEither、IOEither 等,但我可以说它不是任何接口的一部分。所以我正在尝试创建自己的:

这里的问题IOError是同步,所以f:Lazy<A>很好,TaskEither是异步的,所以它需要f:Lazy<Promise<A>>改为。

有没有更好的方法来解决这个问题,或者这是不可能的?我是否需要始终使用 TaskEither,然后添加一个将 IOEither 转换为 TaskEither 并放弃无标记决赛的步骤?

0 投票
1 回答
113 浏览

logging - Scala Cats:如何测试日志记录与如何登录生产代码

您能否给我一个 Scala 中的无标记最终版本,该日志实现在单元测试中很容易测试,但在生产中使用 slf4j 或类似框架运行?

0 投票
2 回答
111 浏览

scala - 具有无标签最终样式的 Kleisli 依赖项

我正在尝试使用 Kleisli 对依赖项进行建模。例如,假设我有以下业务逻辑类型:

现在我有以下解码和数据库访问的实现:

现在,当我想将这两个对象与业务逻辑一起使用时,我遇到了类型冲突:Kleisli[ErrorOr, DbSession, A] 与 Klesili[ErrorOr, Any, A] 不兼容。

像这样组成类的最“正确”的方式是什么?我不想让我的解码器需要数据库会话,而且我也不想在解码器周围创建一个副本/包装器。