Scalaz:找不到幺半群
Scalaz : monoid not found
我正在学习这个 scalaz 教程:http://eed3si9n.com/learning-scalaz/FoldLeft.html:
scala> object FoldLeftList {
def foldLeft[A, B](xs: List[A], b: B, f: (B, A) => B) = xs.foldLeft(b)(f)
}
defined module FoldLeftList
scala> def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
FoldLeftList.foldLeft(xs, m.mzero, m.mappend)
}
sum: [A](xs: List[A])(implicit evidence: Monoid[A])A
显示已进入 scala sbt 控制台,但我正在尝试 运行 在独立的 scala 文件中:
object main extends App {
trait FoldLeft[F[_]] {
def foldLeft[A, B](xs: F[A], b: B, f: (B, A) => B): B
}
object FoldLeft {
implicit val FoldLeftList: FoldLeft[List] = new FoldLeft[List] {
def foldLeft[A, B](xs: List[A], b: B, f: (B, A) => B) = xs.foldLeft(b)(f)
}
}
def sum[M[_]: FoldLeft, A: Monoid](xs: M[A]): A = {
val m = implicitly[Monoid[A]]
val fl = implicitly[FoldLeft[M]]
fl.foldLeft(xs, m.mzero, m.mappend)
}
}
但我收到编译器错误:
[error] \src\main\scala\custom.scala:12: not found: type Monoid
[error] def sum[M[_]: FoldLeft, A: Monoid](xs: M[A]): A = {
[error] ^
[error] \src\main\scala\custom.scala:13: not found: type Monoid
[error] val m = implicitly[Monoid[A]]
[error] ^
是否应该导入 Monoid,如果是,位于何处?
更新:
似乎我错过了 Monoid def :
trait Monoid[A] {
def mappend(a1: A, a2: A): A
def mzero: A
}
scalaz 进口的标准是 import scalaz._, Scalaz._
。您稍后可以删除 Scalaz._
部分,然后只选择您需要的部分。
我正在学习这个 scalaz 教程:http://eed3si9n.com/learning-scalaz/FoldLeft.html:
scala> object FoldLeftList {
def foldLeft[A, B](xs: List[A], b: B, f: (B, A) => B) = xs.foldLeft(b)(f)
}
defined module FoldLeftList
scala> def sum[A: Monoid](xs: List[A]): A = {
val m = implicitly[Monoid[A]]
FoldLeftList.foldLeft(xs, m.mzero, m.mappend)
}
sum: [A](xs: List[A])(implicit evidence: Monoid[A])A
显示已进入 scala sbt 控制台,但我正在尝试 运行 在独立的 scala 文件中:
object main extends App {
trait FoldLeft[F[_]] {
def foldLeft[A, B](xs: F[A], b: B, f: (B, A) => B): B
}
object FoldLeft {
implicit val FoldLeftList: FoldLeft[List] = new FoldLeft[List] {
def foldLeft[A, B](xs: List[A], b: B, f: (B, A) => B) = xs.foldLeft(b)(f)
}
}
def sum[M[_]: FoldLeft, A: Monoid](xs: M[A]): A = {
val m = implicitly[Monoid[A]]
val fl = implicitly[FoldLeft[M]]
fl.foldLeft(xs, m.mzero, m.mappend)
}
}
但我收到编译器错误:
[error] \src\main\scala\custom.scala:12: not found: type Monoid
[error] def sum[M[_]: FoldLeft, A: Monoid](xs: M[A]): A = {
[error] ^
[error] \src\main\scala\custom.scala:13: not found: type Monoid
[error] val m = implicitly[Monoid[A]]
[error] ^
是否应该导入 Monoid,如果是,位于何处?
更新:
似乎我错过了 Monoid def :
trait Monoid[A] {
def mappend(a1: A, a2: A): A
def mzero: A
}
scalaz 进口的标准是 import scalaz._, Scalaz._
。您稍后可以删除 Scalaz._
部分,然后只选择您需要的部分。