existential-type相关内容
编辑:我已经跟进了更多specific question。感谢这里的答题者,我认为接下来的问题更好地解释了我在这里介绍的一些念力。 tl;dr在构造函数上使用带有存在约束的GADT时,我很难在表达式中获得约束的证明。(很严重,对不起!) 我已将一个问题归纳为以下几点。我有一个简单的GADT,它表示称为X的点和称为F的函数应用程序。点X被约束为Objects。 data GADT
..
这些之间究竟有什么区别?我想我理解存在类型是如何工作的,它们就像在 OO 中有一个基类,没有办法进行向下转换.通用类型有何不同? 解决方案 这里的术语“普遍"和“存在"来自谓词逻辑. 通用量化通常写成∀,可以读作“for all",大致意思是听起来像:在类似于“∀x...."的逻辑语句中,任何代替“..."的东西对于所有可能的“x"都是正确的,您可以从被量化的任何一组事物中进行选择.
..
我们习惯于为多态函数使用通用量化的类型.存在量化类型的使用频率要低得多.我们如何使用通用类型量词来表达存在量化类型? 解决方案 事实证明,存在类型只是 Σ 类型(sigma 类型)的一个特例.它们是什么? Sigma 类型 正如 Π-types (pi types) 泛化我们的普通函数类型,允许结果类型依赖其参数的值,Σ-types 泛化对,允许第二个组件的类型依赖第一个值.
..
Scala 中的以下泛型定义有何不同: class Foo[T 和 class Bar[T 我的直觉告诉我它们大致相同,但后者更明确.我发现前者可以编译而后者不能编译的情况,但我无法指出确切的区别. 谢谢! 编辑: 我可以加入另一个吗? class Baz[T
..
给定: 抽象类数据库[F[_]] 我怎样才能使这个特性起作用: //标记特征表明数据库插件支持StaticRolestrait StaticRoles { this: Databases[_] =>} 我想确保 StaticRoles 只混合在扩展 Databases 的类中,但是我不关心类型参数 的具体值>F. 代码返回: 错误:_$1 没有类型参数,预期:1 这是公平的,但它
..
在我的项目中,我有一个这样的星座: 特质 F性状 X[A Trait X 有一个类型参数,其上限为 F.根据我的理解,类型 X[_] 和 X[_
..
说我有一个类型 特质模式[T]trait MyType[T, M 这个编译 val t: MyType[_, _] = ???吨 但不是这个 val t: MyType[_, _] = ???“some_string"->吨 错误表示类似类型参数[_$0,_$1]不符合特征MyType的类型参数边界 所以我的问题是为什么这不会在元组创建时编译? 解决方案 实际上 t 和
..
给定 trait Foo[T 为什么编译器不像 那样解释签名 def foo(f: Foo[_]) 表示未知的_ 必须是一种Bar.相反,它迫使我这样做 def foo(f: Foo[_
..
启动 Scala 3 存在类型已删除原因之一是 存在类型与路径依赖类型在很大程度上重叠,所以拥有它们的收益相对较小. 鉴于“很大程度上",所以并非总是如此,我想知道是否可以提供一个具体的示例来演示如何将存在类型重写为路径依赖类型,以及一个无法进行此类替换的示例? 解决方案 假设 T 是我们要通过存在量词绑定的类型,并且 F[T] 是某种依赖于 T 的类型,所以 type A
..
问题: trait UpperBound[O]特性高[F[O]
..
考虑以下涉及 Aux-pattern 的简单示例: 密封性状 AdtBase抽象案例类 Foo(){输入 T Scastie 我真的不明白为什么 testBaz 会编译.我也预计类型不匹配. 解决方案 似乎没有深层原因. 因为当您显式指定类型参数时,两种方法都会编译 def testBaz(baz: Baz) = Bar[baz.foo.T](baz.foo)//编译d
..
下面的代码是否使用了C ++或Java所理解的动态调度? 据我了解,在最后一行,编译器可能无法在编译时知道要调用(==)的哪个实现,但是代码可以编译并产生正确的结果.有人可以解释一下,这背后是什么样的实现方式(例如vptr)? {-#语言存在量化#-}数据值= A整数数据ForallFunc =全部a.等式=>永远(价值-> a)unpackA(A int)= intequalTest
..
仍然在限制条件下使用存在性(只是探索这个设计空间,我知道许多Haskellers认为它很糟糕).有关更多信息,请参见此问题./p> {-#语言RankNTypes#-}{-#语言的ExistentialQuantification#-}{-#语言ConstraintKinds#-}{-#语言类型应用程序#-}进口GHC.Exts(约束)Foo A类在哪里foo :: a->诠释类Foo a =
..
我试图理解为什么当我在MyModel中为T使用更高种类的类型参数时,下面的代码为何无法编译 抽象类Model [M< ;: Model [M]]类MyModel [T]扩展了Model [MyModel [T]]类Bar [TModel< ;: Model [TModel]]Foo对象扩展了App {新栏[MyModel [_]]} 但是如果我将其更改为 new Bar [MyMod
..
我正在尝试copy()一个具有param类型的Scala case类.在呼叫站点,值的类型为Foo[_]. 这将按预期进行编译: case class Foo[A](id: String, name: String, v1: Bar[A]) case class Bar[A](v: A) val foo: Foo[_] = Foo[Int]("foo1", "Foo 1", Bar[
..
鉴于未初始化的抽象类型成员=:=等于存在类型 implicitly[Undefined =:= x forSome { type x }] // ok 那为什么它们之间似乎有所不同 object O { type Undefined implicitly[Undefined =:= _] // ok def g[F[_]](fun: F[_] => F[_]
..
我阅读了威廉·库克(William Cook)的“重新审视数据抽象",并重新阅读了拉尔夫·拉姆梅尔(Ralf Laemmel)的“表达引理",试图理解如何在Haskell中运用前一篇论文的思想.因此,我试图了解您如何在Haskell中实现(例如,设置联合函数)而不指定类型? 解决方案 有多种方法,具体取决于要使用的“抽象数据类型"的版本. 具体但不透明的类型:自从我读了Cook的可爱
..
具有以下类层次结构: trait Provider[A] { def get(): Seq[A] } abstract class ProviderImpl[A] extends Provider[A] { final override def get(): Seq[A] = Seq() } trait HasX { def getX: Int } trait Refine
..
我有一个域类型的元组,我想将其传递给一个泛型函数(在此示例中我使用ClassTag,但是它是具有不变类型参数的自定义类型类): type TC = (ClassTag[T], Option[T]) forSome {type T} def foo[T](ct: ClassTag[T], o: Option[T]) = {} val tc: TC = (classTag[String], O
..
我有一个带参数的类型别名,我想从一个方法返回不同参数类型的实例: type TC[T] = (ClassTag[T], Option[T]) def gen(x: Int): TC[_] = x match { case 0 => (classTag[Int], Option[Int](0)) case _ => (classTag[String], Option[String](
..