首页 文章
  • 4 votes
     answers
     views

    通常重写Scala案例类

    是否可以一般性地替换案例类中的参数?更具体地说,我想要一个替代函数,它接收一个“查找”案例类和一个“替换”案例类(如语法规则的左侧和右侧)以及一个目标案例类,该函数将返回一个将case case类的参数替换为replace case类的新case类?该函数还可以简单地将case类(Product?)和一个函数应用于case类的所有参数/产品 . 显然,给定一个特定的case类,我可以使用unapp...
  • 18 votes
     answers
     views

    实现具有One Inhabitant的类型的值

    感谢@ MilesSabin的answer我可以编写一个类型级的Fibonacci序列: sealed trait Digit case object Zero extends Digit case object One extends Digit sealed trait Dense { type N <: Dense } sealed trait DNil extends Dense ...
  • 0 votes
     answers
     views

    Scala:迭代类型类对象

    我在Scala程序中使用了几种外部数据类型 . 我的目标是使用类型类在这些数据类型上定义多态函数 . 问题是在Scala程序本身中,这些数据类型必须在某些点按顺序迭代,这些点我需要使用类型类中的多态函数 . 所以,例如,如果我们有 trait Show[A] { def show(a: A, b : String): String } object Show { def apply[A...
  • 137 votes
     answers
     views

    HLists只不过是一种复杂的编写元组的方式吗?

    我真的很想知道差异在哪里,更一般地说,找出不能使用HLists的规范用例(或者说,不会比常规列表产生任何好处) . (我知道Scala中有22个(我相信) TupleN ,而一个只需要一个HList,但这不是我感兴趣的那种概念差异 . ) 我在下面的文中标出了几个问题 . 实际上可能没有必要回答它们,它们更倾向于指出我不清楚的事情,并指导某些方向的讨论 . 动机 我最近在SO上看到了几个人们建议使...
  • 3 votes
     answers
     views

    类型级无形:聚合HList类型元素

    我想用这个Monad折叠一个HList,但是 at the type-level trait TypeMonad{ type Append[A,B] = A with B type Identity = Any } 因此,HList:“A :: B :: C :: HNil”将给出类型“A with B with C with Any” 如果我实现了HList,那很容易做到: sea...
  • 1 votes
     answers
     views

    HList Poly1 Mapper未找到参数映射器的隐式值

    我使用无形2.1.0 -scala 2.11,jdk 1.7:我有一个特点 trait Input[T]{ def location:String } object location extends Poly1 { implicit def caseInput[T] = at[Input[T]](l => l.location) } val list = new In...
  • 3 votes
     answers
     views

    从Shapeless HList到case类的转换时缺少Implicit Generic.Aux

    我刚刚开始学习scala,今天我决定编写一个CSV解析器,它可以很好地加载到case类中,但是将数据存储在Shapeless的HList对象的行(列表)中,这样我就可以接触到类型级编程了 . 这是我到目前为止所拥有的: // LoadsCsv.scala import shapeless._ import scala.collection.mutable trait LoadsCsv[A, T...
  • 3 votes
     answers
     views

    有没有办法迭代无形HMap(异构 Map )的内容?

    我正在尝试在将源AST1转换为目标AST2(在scala中构建DSL编译器)时实现某种多态缓存 . 由于我希望缓存保留精确的翻译结果类型,因此我选择了无形HMap . 它按预期工作,但是在某些时候我需要迭代缓存内容以将其转储到必须记录转换过程的文件,并且稍后将用于构建从A2到A1的反向转换 . 通过查看HMap的源代码,我看到有一个潜在的HashMap [Any,Any]我无法访问,因为它不是HM...
  • 2 votes
     answers
     views

    Scala不为无形HList导出依赖类型(使用Aux)

    给定一个类型相关的Converter类型,它可以将String转换为Integer: trait Converter[From] { type To def to(from: From): To } object Converter { type Aux[From, Out0] = Converter[From] { type To = Out0 } implicit val ...
  • 0 votes
     answers
     views

    从HList检索元素的函数(同时保留其类型)

    我有这种类型将通过无形生成: type hlistt = STUDENT.type :: AUTO_LOANS.type :: HNil 基本上我有一堆案例对象扩展一个特征,所以我设法创建一个方法,它给我所有案例对象的实例作为一个HList 然后使用 import shapeless.ops.hlist.Last 和 init 我写了一个方法来检索HList中的一个节点,如果该值等于字符串&qu...
  • 1 votes
     answers
     views

    我可以从Scala特征覆盖伴随对象`apply`方法吗?

    我想限制Scala类的创建以使用伴随对象构造函数: case class Foo private (bar: String, baz: Int) 现在我不能使用 new 关键字;我只能像_592310那样创建一个foo . 但是,假设我想在对象创建时挂钩 apply 方法,以便在创建实例时提供一些附加功能 . 我可以在特质中做到这一点吗? object Foo extends SpecialAp...
  • 7 votes
     answers
     views

    状态转换与无形状态monad

    Scalaz State monad的modify具有以下签名: def modify[S](f: S => S): State[S, Unit] 这允许状态被相同类型的状态替换,当状态包括无形值(例如 Record ,其类型随着添加新字段而改变)时,该状态不能很好地工作 . 在这种情况下,我们需要的是: def modify[S, T](f: S => T): State[T, U...
  • 6 votes
     answers
     views

    使用宏构建列表时推断HList类型

    我有一个方法采用 HList 并使用它来构建类的实例 . 我想提供一些简化的语法,隐藏明确的缺点 . 所以我想从: MyThingy.describe( 42 :: true :: "string" :: HNil) 至 MyThingy.describe { 42 true "string" } 其中 MyThingy 被定义为 class...

热门问题