existential-type

    0热度

    3回答

    我只是写一些Scala代码: class Cat[T] val x: Cat[_ <: String] = new Cat[String] 它可以被编译,但我不很好理解。 你可以看到我宣布的x类型为Cat[_ <: String],这意味着 Cat[ T forSome { type T <: String; }] 但是,我能做些什么与x当它有这种特殊类型的?是否有任何条件需要我这样申报

    5热度

    1回答

    基于对this question的回答,似乎将“forSome”放置在类型定义的组件之后与将它放在整个事物的末尾不同。举例来说,似乎还有以下之间的差异: def one: Foo[U >: T] forSome {type U >: T} def one: Foo[U forSome {type U >: T}] Scala语言规范似乎不说的差什么,我会想到那动人的量词向外界也就没有什么区

    9热度

    1回答

    如果我有限制的类型有限DataKind {-# LANGUAGE DataKinds #-} data K = A | B data Ty (a :: K) = Ty { ... } 和忘记的类型K确切的无奈...但是记住它在传递一种存在类型字典。 class AK (t :: K) where k :: Ty t -> K instance AK A where k _ = A

    1热度

    2回答

    我需要为我正在处理的东西实现一个通用堆栈。这个堆栈应该能够保存不同类型的元素。例如(1,'c',True,“字符串”)。要支持的功能是top,pop和push。 元组是最自然的想法。 push x s = (x,s) pop s = snd s top s = (fst s, s) 但我也需要支持空栈。这里,pop和top没有在()上定义。 所以我尝试创建一个新类型。 data Stack

    2热度

    1回答

    当试图在Scala中使用更高kinded existentials我碰到以下问题: trait A[H[_]] trait Test { val l: A[List] // [error] type mismatch; // [error] found : A[List] // [error] required: A[_[_] <: Any] /

    5热度

    3回答

    当我试图写一个可以接受任何Class[_]作为参数类: case class A(klass: Class[_]) 我得到这个错误: test.scala:1: warning: inferred existential type Option[Class[_$1]] forSome { type $1 }, which cannot be expressed by wildcards, sh

    1热度

    2回答

    我在解释器中使用类型无标签最终编码。不幸的是,我遇到了类型检查阶段的问题。最小测试用例如下: {-# LANGUAGE RankNTypes, ExistentialQuantification, NoMonomorphismRestriction #-} class Program repr where ... intro1 :: repr a (a,()) ..

    5热度

    2回答

    我有一个F-界类型Sys: trait Sys[S <: Sys[S]] 和一些特征,其以它为类型参数: trait Foo[S <: Sys[S]] 假设我有一个方法是 def invoke[S <: Sys[S]](foo: Foo[S]) =() 假设我有一个模型更新型的:用Foo调用DA子类型它带有一个Foo: sealed trait Update case class O

    4热度

    2回答

    我想在严格的上下文中使用Haskell的存在类型(http://www.haskell.org/haskellwiki/Existential_type)。我从haskell-wiki中学习了这个例子,并试图用它创建一个严格的异构映射。要求地图和它的值得到充分评估。 我定义了3种类型来测试这个。第一个只是一个简单严格的地图。第二种类型是使用存在类型的异构映射。第三种类型与第二种类似,但增加了NFD

    3热度

    1回答

    有时,编码地图中键和值类型之间的依赖关系可能很有用。考虑以下类型: type MyPairs = Seq[(TypeTag[T], T) forSome {type T}] 这里每对的序列中应当具有相同的类型T。但是这种类型在地图使用方面不是很方便。然而,我不能表达这种依赖关系Map[K, V],因为Map有两个独立的类型参数,并且我似乎无法以任何方式“组合”它们来使用单个存在类型。天真的变体