相关疑难解决方法(0)

Lambda用于Haskell中的类型表达式?

Haskell或特定编译器是否具有类型级lambda(如果这甚至是一个术语)?

详细说,我说有一个参数化类型,Foo a b并希望Foo _ b成为一个实例,比如Functor.是否有任何机制可以让我做类似的事情

instance Functor (\a -> Foo a b) where
...
Run Code Online (Sandbox Code Playgroud)

lambda haskell

25
推荐指数
4
解决办法
5406
查看次数

有没有办法在Scala中指定类型参数的子集,推断其余的?

我有一个看起来像这样的课:

class X[A <: Throwable, B, C](b: B, c: C)
Run Code Online (Sandbox Code Playgroud)

可以推断出A,B和C,所以我可以用以下方法实例化它:

val x = new X(3, 4)
Run Code Online (Sandbox Code Playgroud)

这给了我一个X [Nothing,Int,Int] - 经常是我想要的.

但我有时想将A指定为Nothing以外的东西(比如说AssertionError).如果没有指定B和C,这是否可行.我想象的语法如下:

val x = new X[AssertionError](3, 4)
val x = new X[AssertionError, _, _](3, 4)
val x = new X[AssertionError,,](3, 4)
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用.

是否有一些语法,或者某种方式我可以达到相同的结果?

scala type-inference

9
推荐指数
2
解决办法
569
查看次数

Scala:类型参数中的问号

我试图理解下面的一段代码(来自Scalaz库):

def kleisliIdApplicative[R]: Applicative[Kleisli[Id, R, ?]] = ...
Run Code Online (Sandbox Code Playgroud)

我假设表单T[P0, ?]的类型是一个带参数的类型构造函数.但是,我无法找到解释类型参数中问号用法的文档.

一个相关的问题是问号和下划线之间有什么区别?

是否存在所有这些都有详细记录的地方?

scala scalaz type-parameter

9
推荐指数
1
解决办法
2165
查看次数

scala中的类型参数定义

可能重复:
Scala中什么是lambda类型,它们有什么好处?

  1. 如何解决这种类型的定义:Pure[({type ?[a]=(R, a)})#?]

  2. 使用这种结构的原因是什么?

Snipped来自scalaz库:

trait Pure[P[_]] {
  def pure[A](a: => A): P[A]
}

object Pure {
  import Scalaz._
//...
  implicit def Tuple2Pure[R: Zero]: Pure[({type ?[a]=(R, a)})#?] = new Pure[({type ?[a]=(R, a)})#?] {
  def pure[A](a: => A) = (Ø, a)
  }

//...
}
Run Code Online (Sandbox Code Playgroud)

scala scalaz

7
推荐指数
0
解决办法
162
查看次数

在Scala中,我可以(某些SIP允许我)仅指定泛型方法的某些类型参数吗?

在Scala中调用带有类型参数的方法时,我经常尝试安排代码,以便类型推断器可以找到关于类型参数的自己,而不需要我填写它们.在某些情况下,它失败了,我必须手动提供它们.

大多数情况下,这不是问题,但对于具有多个类型参数的方法(例如,大多数方法需要隐式CanBuildFrom),我想知道是否有一种方法可以帮助类型推理器,只给它一个所需类型参数,并要求它尝试猜测其他参数.它看起来像在内部,它必须做这样的事情,因为它有时产生"预期类型A[B, ?]但得到A[C, D]" 形式的错误消息,这意味着在两个类型参数中A,它可以找到第一个B但是有没有关于第二个的信息.

使用案例: Tomasz的问题,这段代码:

def firstAndLast[CC, A, That](seq: CC)(implicit asSeq: CC => Seq[A], cbf: CanBuildFrom[CC, A, That]): That = {
  val b = cbf(seq)
  b += seq.head
  b += seq.last
  b.result
}
Run Code Online (Sandbox Code Playgroud)

无法调用List("abc", "def") map firstAndLast,但这可行:

List("abc", "def") map firstAndLast[String, Char, String]
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我的问题归结为:有没有办法告诉类型inferencer CC参数应该是什么String,并要求它找出自己的AThat?实质上,就像

List("abc", "def") map firstAndLast[CC = String]
Run Code Online (Sandbox Code Playgroud)

要么

List("abc", "def") map firstAndLast[String, <guess>, <guess>] …
Run Code Online (Sandbox Code Playgroud)

scala type-inference type-parameter

5
推荐指数
1
解决办法
204
查看次数

如何在Scala中使用否定类型?

我想做这样的事情:

def iDontLikeStrings(arg: Not[String]) = {....}
Run Code Online (Sandbox Code Playgroud)

基本上,这应该编译:

iDontLikeStrings(23) 
iDontLikeStrings(true)
Run Code Online (Sandbox Code Playgroud)

这不应该编译:

iDontLikeStrings("hello") 
Run Code Online (Sandbox Code Playgroud)

type-systems scala

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

List,Options和其他复杂类型的更高kinded类型scala

我还在学习Scala - 所以请原谅我,如果这非常简单.我对Scalaz或Shapeless也不是很流利 - 我只是开始探索这些库.我正在寻找一个简单的论文,向我解释我如何能做到这样的事情

trait AmazingMalini[F[G[_]]] {
      def fMap[A,B](aa: F[G[A]])(f : A => F[G[B]]) : F[G[B]] 
}
Run Code Online (Sandbox Code Playgroud)

然后我想能够做这样的事情 -

trait SomeCrazyMagicWithList extends  AmazingMalini[Option[List]]{
   def fMap[A,B](aa: Option[List[A]])(f : A => Option[List[B]]) :Option[List[B]] =  ???
}
Run Code Online (Sandbox Code Playgroud)

请注意,选项或列表类型只是示例我有一些容器类型,我会在那里替换它们(为应用程序构建一个小的图形遍历,如DSL).

scala higher-kinded-types

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

在scala中更新数组的切片

Scala数组有一个slice()方法来返回连续的子集.那很有用!

scala> val arr = Array(1,2,3,4,5,6,7,8)
arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
scala> arr.slice(2,6)
res1: Array[Int] = Array(3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

现在如何更新连续的子集?我们有什么简洁的选择 - 也许比我们使用System.arrarycopy的后备更好?

scala> val carr = Array(111,222,333,444,555,666,777,888)
carr: Array[Int] = Array(111, 222, 333, 444, 555, 666, 777, 888)

scala> System.arraycopy(carr,3,arr,3,5)

scala> arr
res6: Array[Int] = Array(1, 2, 3, 444, 555, 666, 777, 888)
Run Code Online (Sandbox Code Playgroud)

arrays scala

2
推荐指数
1
解决办法
1450
查看次数

Scala中更高级/类型绑定的益智游戏

当我遇到这个问题时,我试图用更高种类和类型的边界来玩.我的用例是我希望能够使用Request的任何子类型或Request类型本身来参数化GenericAction实例.Action trait使用默认类型Request扩展GenericAction特征(在这种情况下,只会生成Request的匿名实例).

trait Request[+A]

trait GenericAction[A, R[_] <: Request[_]]

trait Action[A] extends GenericAction[A, Request]

trait ActionBuilderBase[R[_] <: Request[_], G[_] <: GenericAction[_,R]]
Run Code Online (Sandbox Code Playgroud)

ActionBuilderBase具有与子特征ActionBuilder和ActionBuilder2共享的实用程序方法.ActionBuilder生成默认的Action [A]和Request [A]实例.

trait ActionBuilder extends ActionBuilderBase[Request,Action]
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都那么好,但是当我尝试创建另一个使用R和GenericAction子类扩展ActionBuilderBase的特性时(在这种情况下会创建GenericAction的匿名实例),它无法编译.我想原因是在第一个ActionBuilder的情况下,请求类型已经被"填充"(因为Action [A]已经有一个请求类型== Request),这与下面的示例不同.为了让这个例子有效,我需要"填写"什么?

//Fails with "GenericAction takes two type parameters, expected: one" - what should the type annotation for GenericAction look like?
trait ActionBuilder2[R[_] <: Request[_]] extends ActionBuilderBase[R,GenericAction]
Run Code Online (Sandbox Code Playgroud)

scala existential-type higher-kinded-types

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

Scala的类型系统与Java相比如何?

在其中一个Stack Overflow答案中,引用了:

Scala是一种完全面向对象的语言,比Java更为强大,它是非研究语言中最先进的类型系统之一.

Scala的类型系统在哪些方面比Java更先进?

java type-systems scala

0
推荐指数
1
解决办法
656
查看次数