【问题标题】:import scalaz monad syntax outside of function在函数之外导入 scalaz monad 语法
【发布时间】:2019-09-11 03:11:18
【问题描述】:

有什么方法可以避免在所有函数的主体中导入 monad 语法?这是我一直在写的内容:

object Example {
  def doMonadThings[M[_]: Monad, A](ma: M[A]): M[A] = {
    val monadSyntax = implicitly[MonadSyntax[M]]
    import monadSyntax._

    ma.flatMap { x => point(x) }
  }
}

scalaz 7.2

编辑:

这就是我最终得到的结果:

object Example {
  import scalaz.syntax.monad._

  def doMonadThings[M[_], A](ma: M[A])(implicit m: Monad[M]): M[A] =
    ma.flatMap { x => m.point(x) }
}

【问题讨论】:

    标签: scala scalaz


    【解决方案1】:

    试试

    import scalaz.syntax.monad._
    
    def doMonadThings[M[_]: Monad, A](ma: M[A]): M[A] = {
      ma.flatMap[A] { x => x.point }
    }
    

    【讨论】:

    • 这会得到所有的方法,但没有得到像point这样的函数。
    • 哦,等等,我看看你在那里做了什么。在所有内容上都隐含point 有点奇怪,但是是的,这确实解决了我的问题。
    • @codenoodle 否则你可以避免语法:val m = Monad[M]m.bind(ma){ x => m.point(x) }
    • val m = Monad[M] import m._ bind(ma){ x => point(x) }
    • 啊,这给了我一个想法。我将用我登陆的内容更新问题。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多