问题标签 [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.
scala - 第一个最终的无标签方法
我正在尝试在 Scala 中使用第一次无标记最终模式并且有点挣扎。
我有以下代数定义:
和口译员的实施:
我想做的是,Environment
组成DbSystemEnvironment
. 这里的问题是,我无法从中获取价值,因为我对inenv.get(url)
什么都不知道,除了它是一个. 如何从中获取价值?F
DbSystemEnvironment
MonadError
env.get(url)::F[Option[String]]
另外,如果在函数中env.get(url)
返回,那么它应该返回。Nothing
read
MonadError
scala - 为无标签代数编写法律或单元测试
我已经写了两个无标签代数,我想为其中一个写定律。
代数如下:
口译员如下:
在函数式编程中,有 Monoid、Monads 等规律。
我的问题是:
- 我的代数是否需要法律或编写单元测试就足够了?
- 法律和单元测试有什么区别?
- 我应该如何写
DbConnector
代数定律
scala - 无标签代数需要定律吗?
我阅读了JOHN A DE GOES 关于无标签决赛的精彩博客。在 5.Fake Abstraction 一节中,他提到:
不幸的是,这些运算不满足任何代数定律——不满足!这意味着当我们编写多态代码时,我们无法对 putStrLn 和 getStrLn 进行一般推理。
据我们所知,这些操作可能是启动线程、创建或删除文件、按顺序运行大量单独的副作用等等。
他对应于以下无标记代数:
这是否意味着不可能为无标签代数编写定律,或者我是否误解了某些东西。
scala - 如何在抽象效果类型上配置 Cats Timer
假设我在使用无标记Cats-effect
最终方法的项目中有以下方法签名:
我正在尝试schedule
使用纯 FP 对方法调用安排操作。
我试过这样:
但它没有用,因为效果 println("tick")
在Timer
初始化阶段执行。
我怎样才能让它正常工作?
我还可以创建某种递归构造,以便每 10 秒重复一次我的预定操作吗?
scala - Intellij IDEA 无法解析隐含符号(scala tagless final)
我有一些使用无标记最终方法的代码,发现 Intellij IDEA 无法识别隐式类中的方法。
我这里有一些类型类(Functor
,Apply
等Applicative
),还有一个implicit class FunctorOps
带有一些辅助方法的Functor
. 此代码编译但 IDEA 找不到void
和implicit Applicative
. 查看错误:
无法解析符号 void:44
没有类型的隐式参数:Applicative[F_]:51
代码看起来不太难:
我的问题:有什么方法可以避免在 IDEA 中出现这个错误,或者最好将VS Code与Metals或其他东西一起使用?无标签final是否有更好的效果?
我使用 std lib 并在 sbt 中添加编译器插件以使用F
点方法语法:
addCompilerPlugin("org.augustjune" %% "context-applied" % "0.1.4")
截图:
我的环境:
Intellij IDEA版本2020.2.3(带有最后一个稳定的scala 插件)
操作系统:MacOS Catalina 10.15.7
scala - 在 Http4s API 中将 `Option[A]` 转换为 Ok() 或 NotFound()
我有一个如下所示的 API:
和一个看起来像这样的路由:
因此,当有 时None
,它会转换为 404。由于有多个路由,因此.flatMap { ... }
会重复。
问题:如何将其移动到.orNotFound
特定于我的项目的单独帮助函数中?
我的尝试:
为了让我的事情变得简单(并避免F
最初的参数化),我试图在里面定义这个comicsRoutes
:
但是???
这里有什么?似乎不是Response
或Status
。此外,它.flatMap { ... }
是在 下制作的import dsl._
,但我想把它移到更远的地方。什么是好地方?它是进入路由文件,还是我把它放在一个单独的ExtendedSomething
扩展文件中?(我希望这可能是相关的???
,Something
但我对缺少的类型有点困惑。)
(同样重要的是,我如何找出???
这里有什么?我希望???
在类型级别可以给我一个“类型漏洞”,而 VSCode 的悬停功能提供了非常零星的文档价值。)
typescript - 将 Task[Either] 和 IO[Either] 表示为包含 tryCatch 的单个 monad?
有没有办法将 IOEither 和 TaskEither 表示为一个也包括tryCatch
?
我目前将通过 HTTP 使用 API,因此使用 TaskEither 是有意义的,但预计此代码将“离家更近”迁移,并且在那时将其设为有意义IOEither
。所以我想写一个无标签风格的消费者界面
到目前为止,一切都很好!然而,虽然有一个tryCatch
for Option、Either、TaskEither、IOEither 等,但我可以说它不是任何接口的一部分。所以我正在尝试创建自己的:
这里的问题IOError
是同步,所以f:Lazy<A>
很好,TaskEither
是异步的,所以它需要f:Lazy<Promise<A>>
改为。
有没有更好的方法来解决这个问题,或者这是不可能的?我是否需要始终使用 TaskEither,然后添加一个将 IOEither 转换为 TaskEither 并放弃无标记决赛的步骤?
logging - Scala Cats:如何测试日志记录与如何登录生产代码
您能否给我一个 Scala 中的无标记最终版本,该日志实现在单元测试中很容易测试,但在生产中使用 slf4j 或类似框架运行?
scala - 具有无标签最终样式的 Kleisli 依赖项
我正在尝试使用 Kleisli 对依赖项进行建模。例如,假设我有以下业务逻辑类型:
现在我有以下解码和数据库访问的实现:
现在,当我想将这两个对象与业务逻辑一起使用时,我遇到了类型冲突:Kleisli[ErrorOr, DbSession, A] 与 Klesili[ErrorOr, Any, A] 不兼容。
像这样组成类的最“正确”的方式是什么?我不想让我的解码器需要数据库会话,而且我也不想在解码器周围创建一个副本/包装器。