小编Lev*_*pan的帖子

读者Monad与Scalaz

我尝试用scalaz定义Reader monad,如下所示:

import scalaz._
import Scalaz._

final class Reader[E,A](private[Reader] val runReader: E => A)

object Reader {
  def apply[E,A](f: E => A) = new Reader[E,A](f)
  def env[E]: Reader[E,E] = Reader(identity _)

  implicit def ReaderMonad[E] = new Monad[PartialApply1Of2[Reader,E]#Apply] {
    def pure[A](a: => A) = Reader(_ => a)

    def bind[A,B](m: Reader[E,A], k: A => Reader[E,B]) =
      Reader(e => k(m.runReader(e)).runReader(e))
  }
}


object Test {
  import Reader._

  class Env(val s: String)

  def post(s: String): Reader[Env, Option[String]] =
    env >>= (e => if (e.s …
Run Code Online (Sandbox Code Playgroud)

monads scala scalaz

8
推荐指数
1
解决办法
2761
查看次数

无法实例化特征

我尝试定义这样一个简单的特征:

scala> trait T { def p[A,B]: Map[A,B] }
defined trait T

scala> new T { def p = Map(0 -> 1) }
<console>:7: error: object creation impossible, since method p in trait T of type [A,B]Map[A,B] is not defined
       new T { def p = Map(0 -> 1) }
       ^
Run Code Online (Sandbox Code Playgroud)

怎么会?

谢谢

scala

2
推荐指数
1
解决办法
2811
查看次数

标签 统计

scala ×2

monads ×1

scalaz ×1