首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将scala案例类声明为Scalaz半群的实例?

如何将scala案例类声明为Scalaz半群的实例?
EN

Stack Overflow用户
提问于 2015-06-25 08:24:59
回答 1查看 239关注 0票数 3

我有一个类型,定义如下:

代码语言:javascript
复制
import scalaz._, Scalaz._
case class MyInt(i : Int)

我想要创建一个Semigroup的实例。我试过这个:

代码语言:javascript
复制
object MyInt {
  implicit def myIntSemigroup: Semigroup[MyInt] = new Semigroup[MyInt] {                                                                                                                                                                       
    def append(a: MyInt, b: MyInt) : MyInt = MyInt(a.i + b.i)
  }
}

当我运行sbt console时,会得到以下错误:

代码语言:javascript
复制
[info] Set current project to hello (in build file:/home/mp/code/scala/examples/semigroup/)
[info] Compiling 1 Scala source to /home/mp/code/scala/examples/semigroup/target/scala-2.10/classes...
[error] /home/mp/code/scala/examples/semigroup/src/main/scala/Main.scala:6: object creation impossible, since method append in trait Semigroup of type (f1: MyInt, f2: => MyInt)MyInt is not defined
[error]   implicit def myIntSemigroup: Semigroup[MyInt] = new Semigroup[MyInt] {                                                                                                                                                               
[error]                                                       ^   
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 5 s, completed 25-Jun-2015 08:15:37

如何使MyInt成为Semigroup,以便在其上使用|+|

为了完整起见,下面是我的build.sbt文件:

代码语言:javascript
复制
name := "hello"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.1.3"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 09:01:26

如果仔细查找Scalaz半群的签名,则第二个参数被定义为名称,而在实现中则有不同的签名。将第二个参数更改为b: => MyInt,它应该编译

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31044950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档