相关疑难解决方法(0)

Scala 2.8馆藏图书馆是"历史上最长的遗书"吗?

我刚刚开始研究即将发布的2.8版本中的Scala集合库重新实现.熟悉2.7中的库的人会注意到,从使用角度来看,库几乎没有变化.例如...

> List("Paris", "London").map(_.length)
res0: List[Int] List(5, 6)
Run Code Online (Sandbox Code Playgroud)

......适用于任何一个版本.图书馆非常实用:实际上它太棒了.然而,那些以前不熟悉Scala并且想要了解语言的人现在必须理解方法签名,例如:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
Run Code Online (Sandbox Code Playgroud)

对于这样简单的功能,这是一个令人生畏的签名,我发现自己很难理解.并不是说我认为Scala有可能成为下一个Java(或/ C/C++/C#) - 我不相信它的创建者会瞄准那个市场 - 但我认为Scala成为/当然是可行的下一个Ruby或Python(即获得重要的商业用户群)

  • 这会让人们去Scala吗?
  • 这是否会让Scala在商业世界中成为一个不好的名字,作为学术玩具,只有专门的博士生才能理解?被CTO S和软件的负责人会感到害怕了吗?
  • 图书馆重新设计了一个明智的想法吗?
  • 如果您在商业上使用Scala,您是否担心这一点?您是打算立即采用2.8还是等待看看会发生什么?

Steve Yegge 曾经因为他过于复杂的类型系统而攻击Scala(在我看来是错误的).我担心有人会在这个API上传播FUD(类似于Josh Bloch如何通过向Java添加闭包来吓唬JCP).

注意 - 我应该清楚,虽然我相信约书亚布洛赫在拒绝BGGA关闭提案方面具有影响力,但我并没有将此归因于他诚实地认为提案代表错误的其他信息.


尽管我的妻子和同事一直在告诉我,我不认为我是一个白痴:我在牛津大学获得了很好的数学学位,而且我已经在商业方面进行了近12年的编程,并在斯卡拉进行了大约一年(也是商业上).

请注意,炎症主题标题是关于 20世纪80年代早期英国政党宣言的引文.这个问题是主观的,但这是一个真实的问题,我已经成为CW,我想就此事提出一些意见.

scala scala-2.8 scala-collections

865
推荐指数
16
解决办法
11万
查看次数

如何使用猫和状态Monad

我第一次使用猫来解决代码出现的第一天,我想知道是否有可能改进.

给定update具有以下签名 的方法def update(i: Instruction): PosAndDir => PosAndDir

我想出来:

val state: State[PosAndDir, List[Unit]] = instructions.map(i => State.modify(update(i))).toList.sequenceU
val finalState = state.runS(PosAndDir(Pos(0, 0), North)).value
Run Code Online (Sandbox Code Playgroud)

并且

  def update2(i: Instruction): State[PosAndDir, Option[Pos]] =
    State.modify(update(i)).inspect(pad => if (i == Walk) Some(pad.pos) else None)
  …
  val state = instructions.map(update2).toList.sequenceU
  val positions = state.runA(PosAndDir(Pos(0, 0), North)).value.flatten
Run Code Online (Sandbox Code Playgroud)

更确切地说,问题是:

  1. 为什么我们需要调用.value(使用scalaz,它是透明的)?
  2. 有没有办法update2用理解来提高可读性?
  3. 在猫中有一个Applicative实例Seq(我知道scalaz中没有).?
  4. 任何改进代码的想法?

functional-programming scala scala-cats

7
推荐指数
1
解决办法
2822
查看次数

为什么Scalaz中没有Array的Functor实例

它看起来像scalaz提供了一个Functor实例,List但没有为Array(或Seq)提供它.

scala> val fa = Functor[Array]
<console>:17: error: could not find implicit value for parameter F: scalaz.Functor[Array]
       val fa = Functor[Array]
                       ^
scala> val fl = Functor[List]
fl: scalaz.Functor[List] = scalaz.std.ListInstances$$anon$1@20c4b59

scala> val fl = Functor[Seq]
<console>:17: error: could not find implicit value for parameter F: scalaz.Functor[Seq]
       val fl = Functor[Seq]
                       ^
Run Code Online (Sandbox Code Playgroud)

这是为什么 ?他们不是算子吗?

arrays scala functor scalaz

4
推荐指数
1
解决办法
136
查看次数

如何将Seq [Reader [E,A]])转换为Reader [E,Seq [A]]

这是我的实际解决方案

  private def transpose[E, A](readers : Seq[Reader[E, A]]) : Reader[E, Seq[A]] =
    Reader { e: E => readers.map { r => r(e) } }
Run Code Online (Sandbox Code Playgroud)

scalaz是否有更简单的解决方案(可能使用现有的组合器)?

monads scala scalaz

3
推荐指数
1
解决办法
131
查看次数