程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何为cats Free Monad中使用的ADT创建Functor大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何为cats Free Monad中使用的ADT创建Functor?

开发过程中遇到如何为cats Free Monad中使用的ADT创建Functor的问题如何解决?下面主要结合日常开发的经验,给出你关于如何为cats Free Monad中使用的ADT创建Functor的解决方法建议,希望对你解决如何为cats Free Monad中使用的ADT创建Functor有所启发或帮助;

在cats.free.Free Monad 库的帮助下,我正在使用case 类编写DSL。 DSL 将由接收消息的 Actor 解释,因此每个 Actor 必须首先使用 Free.resume 解开命令。

年前使用 scalaz where we also used the resume function 也很好地解决了这个问题,但是免费 monad 的 Functor 是 easy to create,因为我们使用的案例类带有一个额外的函数参数,可以映射到这样的如下@H_189_5@mapAsync。

k

但是目前用于cats.scala.Free on the cats Free Monad web page 的示例没有这样的论点。事实上,当通过自然转换使用对 Free Monads 的解释时,这些工作得很好。我只用一个案例类尝试了 with a super simple DSL

case class Getresource[Rdf <: RDF,A](
   uri: Rdf#URI,k: namedresource[Rdf] => A) extends LDPCommand[Rdf,A]

然后我可以为它编写 a simple Script,它按预期工作 @L_502_6@。

但是对于基于 Actors 的解释,我现在需要解开 free monad 中的每个命令,这些命令使用 Free 的 sealed Trait LDPCmd[A]: def url: Uri case class Get[T](url: Uri) extends LDPCmd[Response[T]] 函数发送给不同的 actor。这需要一个函子。但我不清楚函子在哪里可以得到控制。即,我在里面放了什么???位置在这里

resume

解决方法

问题在于您的数据类型:Get[T] 不使用 T,因此无法有意义地映射它,除了无操作:g: Get => Get[B](g)

,

答案是它似乎又回到了向 case 类添加额外函数的过程。在猫聊天频道 Rob Norris 写道:

Free[F,*] 的经典编码仅当 F 是函子时才是单子,因此您需要额外的 Blah => 每种情况的成员。然后我们发现您可以使用 Free[Coyoneda[F,*],*] 并免费获得该机器。然后我们想出了如何将它烘焙到 Free 中,因此您大部分时间都不需要这样做。 但是如果你需要一步一步地完成你的计算,你确实需要其中一种编码,因为在这种情况下 F 仍然需要是一个函子。

他指向的代码是SimmessageSocket.scala。

sealed Trait Step[+A]
  case class Send[A](m: BACkendmessage,k: Unit => A) extends Step[A]
  case class Expect[A](h: PartialFunction[Frontendmessage,A]) extends Step[A]
  object Step {
    implicit val FunctorStep: Functor[Step] =
      new Functor[Step] {
        def map[A,B](fa: Step[A])(f: A => B): Step[B] =
          fa match {
            case Send(m,k) => Send(m,k andThen f)
            case Expect(h)    => Expect(h andThen f)
          }
      }
  }

大佬总结

以上是大佬教程为你收集整理的如何为cats Free Monad中使用的ADT创建Functor全部内容,希望文章能够帮你解决如何为cats Free Monad中使用的ADT创建Functor所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。