existential-type

    3热度

    1回答

    考虑下面的两个代码。他们完成相同的目标:只有这样A[T] -s可以存储在T延伸C 但是他们使用两种不同的方法来实现这一目标的Container: 1)existentials 2)协方差 我更喜欢第一种解决方案,因为A保持简单。为什么我会想要使用第二种解决方案(协方差),有什么理由吗? 我与第二个解决方案的问题是,它是在这个意义上,它不应该是A -s责任来形容我可以在一个容器仓库并没有什么不自然,

    0热度

    1回答

    我正在通过drmacvier博客了解Scala中的存在类型。阅读完后,我正在试验类型,我正在按照以下方式检查类型的相等性,如rnduja博客中所述。 def implicitly[A](implicit a: A) = a // To check equality of two types class =:=[A, B] implicit def equalTypeInstance[A]

    1热度

    1回答

    只有多态函数才能应用于存在类型的值。这些属性可以用表达式的相应量词来表示,并以自然变换为特征。 同样,当我们定义了一个类型构造 data List a = Nil | Cons a (List a) 这种类型的构造适用于所有a,而式家庭允许具有非均匀类型构造 type family TRes i o type instance TRes Bool = String type instanc

    0热度

    2回答

    下面的类层次结构: 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 } t

    4热度

    3回答

    数据Foo a的定义如下: data Foo a where Foo :: (Typeable a, Show a) => a -> Foo a -- perhaps more constructors instance Show a => Show (Foo a) where show (Foo a) = show a 一些实例: fiveFoo :: Fo

    1热度

    1回答

    我有一些选项,当它们不是我想要的时候不想运行我的变换函数。 当前处理选项的方法是这样的: def writeOptionalXml[T](content: Option[T], mapFn: T => Xml): Xml = content match { case Some(c) => mapFn(c) case None => NodeSeq.Empty }

    1热度

    1回答

    为什么下面的代码不能编译? trait B[T <: B[T]] case class A[T <: B[T]](t: T) class C() extends B[C] val c: C = new C() val r2: A[_] = A(c) //compiles val r3: A[_] = A(c) //compiles

    4热度

    1回答

    这里有几个类似的问题,我读了它们,发现没有答案可以让我的代码工作。我想我碰到了一个需要比正常情况下更精确的类型规格的角落案例。 我的情况用两个字。我想创建非常简单的异构列表示例来加深我对scala语言的理解。我给自己设置的限制是:没有任何形式的暗示,只是普通的scala类型系统。 Implicits可以使许多事情变得更容易,但我想努力尝试。 我已经工作的代码,但我想改进它。在这里它是: seale

    4热度

    2回答

    对类型变量进行参数化很好,但不能缩放。作为可能发生的一个例子,http://oleg.fi/gists/posts/2017-04-26-indexed-poptics.html给出了一个包含9个类型变量的抽象。我一直在研究程序转换的框架,这些程序转换由程序设计语言进行了参数化,并且可以想象将来有几十或几百个参数。 所以这里的基本问题:我有一个数据类型T,它是参数化的N类型。如何在T上编写一个函数

    2热度

    1回答

    我想表达F#自由单体的教会编码。 Free是专门针对特定仿函数的,Effect。 我可以写出return_ : 'T -> Free<'T>和bind: ('T -> Free<'U>) -> Free<'T> -> Free<'U>没有任何问题。 我的实施草图如下。 type Effect<'T> = GetStr of (string -> 'T) | PutStr of