2016-05-05 14 views
1

finde ich im Anschluss an diesen scalaz Tutorial: http://eed3si9n.com/learning-scalaz/FoldLeft.html:Scalaz: Monoid nicht

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$1: Monoid[A])A 

Dies trat in scala sbt Konsole gezeigt, aber ich bin versucht, es im Standalone-scala-Datei auszuführen:

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) 
    } 

} 

ich aber nehme Compiler-Fehler:

[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]      ^

Sollte Monoid importiert werden, wenn ja, wo befindet sich ?

Update:

Scheint vermisste ich Monoid def:

trait Monoid[A] { 
    def mappend(a1: A, a2: A): A 
    def mzero: A 
    } 

Antwort

1

Der Standard für scalaz Importe ist import scalaz._, Scalaz._. Sie können später das Scalaz._ Teil entfernen und einfach auswählen, was Sie brauchen.