首页 文章
  • 3 votes
     answers
     views

    Scala:返回类型Seq [A]或未来[Seq [A]]的泛型

    The Problem 我有两个类如下所示: class Now { def do[A](f: Int => A): Seq[A] } class Later { def do[A](f: Int => A): Future[Seq[A]] } 两个类之间的唯一区别是,Now返回Seq,稍后返回Future Seq . 我希望这两个类共享相同的接口 What I Have ...
  • 1 votes
     answers
     views

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

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

    使用较高级别的类型时类型不匹配

    在库中,有一个类型较高的类采用一个类型参数 . 我想给它一个带有两个类型参数的类型,所以我使用 type 表达式来修复另一个参数 . 但它并没有像我期望的那样 . 代码简化为: object Main { class Bar[T[_]] { def bar[A]: Option[T[A]] = None } def foo[A] = { type T[B] = Ma...
  • 3 votes
     answers
     views

    Scala更高级的kinded类型语法

    我是Scala的新手,也是更高级别的新手 . 我想写这样的东西; trait Actor[E[Dependency] <: Event[Dependency]] { def execute(dependency: Dependency): Unit } 但是我不能在execute方法中引用类型参数Dependency - 编译器不知道它 . 我知道如果没有HKT,我可以通过以下方式解...
  • 3 votes
     answers
     views

    scala类型类具有更高的kinded类型和方差

    我有一个与此非常类似的问题:Scala higher kinded type variance 然而,这有点不同,嗯,它不编译(scala 2.11.8) . 基本思想是采用"things"提供的数组 . 如果数组为null,则返回某种类型的默认值(例如 Boolean , Option , List[Int] ),否则请对数组进行处理并生成结果 . 结果和默认值具有相同的类型...
  • 4 votes
     answers
     views

    Scala:高级类型作为类型参数

    请考虑以下代码段(它演示了我实际问题的简化版本): trait Id[Type[_]] { def id[S]: S => Type[S] } trait IdTransformer[Type[_]] { type Result[_] // depends of Type def idTransform[P]: P => Result[P] def composeW...
  • 5 votes
     answers
     views

    Scala和Haskell中更高的键控类型

    Data.Foldable显示以下代数数据类型: data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a) 它 kind 是 * -> * . 它需要 a 类型 . Prelude> :k Tree Tree :: * -> * 现在让我们看看来自Functional Programming in Scala的Scala的...
  • 4 votes
     answers
     views

    在Scala中为高级类型键入约束

    我试图在scala中为Functors编写一个通用法则,我可以在scalacheck测试中为许多仿函数重用这种格式 . 法律应该由构造函数F [_]和元素类型参数化,比如A. 理想情况下,我会写这样的东西: def functorLaw[A, F[_] :Arbitrary] (fn :Functor[F]) :Prop = forAll { (fa :F[A]) => true } (我...
  • 4 votes
     answers
     views

    较高的kinded类型与泛型

    我正在阅读Scala中更高级的类型,我不能围绕下划线的使用 . 例如: trait Functor[F[_]] { def map[A, B](fa: F[A])(f: A => B) : F[B] } val listFunctor = new Functor[List] { override def map[A, B](fa: List[A])(f: A => B) = ...
  • 1 votes
     answers
     views

    扩展用户定义的更高级别的kinded类型

    我在scala中有更高级别的kinded类型的用户定义别名: type FutureOfLastError = Future[LastError] 我也有这种类型的值: val myFuture: FutureOfLastError = ... 要编写可读代码,我想定义(例如)一个类似的方法 def mapToString = { ... } 它将FutureOfLastError的一个实例...
  • 83 votes
     answers
     views

    较高的kinded类型何时有用?

    我一直在做F#开发一段时间,我喜欢它 . 然而,我知道在F#中不存在的一个流行语是更高级的类型 . 我已经阅读了关于高等类型的材料,我想我理解他们的定义 . 我只是不确定他们为什么有用 . 有人可以在Scala或Haskell中提供一些高级类型易于使用的示例吗?这需要F#中的变通方法?同样对于这些示例,如果没有更高级的类型(或F#中反之亦然),解决方法是什么?也许我只是习惯于解决它,我没有注意到这...
  • 1 votes
     answers
     views

    如何在Scala中为Typeclass的“常规”泛型混合使用更高级的类型

    我正在尝试在scala中编写自己的Typeclass,以提供一种将类转换为任意“DataObject”的机制(我正在使用下面的Map,但我并不希望这一点很重要) . 到目前为止,我有以下内容: type DataObject = Map[String, Any] trait DataSerializer[A] { def toDataObject(instance: A): DataOb...
  • 30 votes
     answers
     views

    Java中更高级的泛型

    假设我有以下课程: public class FixExpr { Expr<FixExpr> in; } 现在我想介绍一个泛型参数,抽象使用Expr: public class Fix<F> { F<Fix<F>> in; } 但Eclipse并不喜欢这样: F型不是通用的;它不能用参数<Fix <F >>进行参...
  • 43 votes
     answers
     views

    C语言较高的类型

    这个问题适用于了解Haskell(或任何其他支持高级类型的功能语言)和C ... 是否可以使用C模板对更高级的kinded类型进行建模?如果是,那怎么样? EDIT : 来自Tony Morris的this演讲: Higher-order Polymorphism : Java和C#等语言具有一阶多态性,因为它们允许我们对类型进行抽象 . 例如 List<A> 可以有 revers...
  • 2 votes
     answers
     views

    Scala:类型推断和子类型/更高级的类型

    我一直在和Scalaz一起玩,以获得scala的一点点haskell感觉 . 为了理解scala中的工作原理,我开始自己实现各种代数结构,并且遇到了Scalaz人员提到过的行为 . 这是我实现仿函数的示例代码: trait Functor[M[_]] { def fmap[A, B](a: M[A], b: A => B): M[B] } sealed abstract class F...
  • 20 votes
     answers
     views

    类型的函数和应用程序(* - > *) - > *

    我遇到了一种情况,我的代码将从使用 Functor 和 Applicative 类似的抽象中受益,但对于类型 (* -> *) -> * . 定义一个更高级的仿函数可以像_2935073这样完成 class HFunctor f where hfmap :: (forall x. a x -> b x) -> f a -> f b 但 Applicativ...
  • 4 votes
     answers
     views

    Scala中的方法级高级绑定类型

    我刚刚开始在Scala中使用更高级的类型,我遇到了我不理解的行为 . 我在Scala 2.9.0.1的REPL中做了所有这些 . 首先,我创建一个映射器特征,以便我可以映射任何类型M的元素: trait Mapper { def mapper[M[_], A, B](m: M[A], f: A => B): M[B] } 这是我对mapper的实现: val mymapper =...
  • 20 votes
     answers
     views

    是否有可能在Scala中“嘲笑”更高级的类型?

    假设我有一个具有两个类型参数的特征,例如: trait Qux[A, B] 和具有较高类型参数的另一个特征,例如, trait Turkle[C[_]] 我希望能够为 Qux 的一个类型参数替换一个固定值,以便它可以用于参数化 Turkle . 这是一个示例(在Scala中没有意义的代码!): trait Baz[A] extends Turkle[Qux[A, _]] 任何人有任何想法如...
  • 3 votes
     answers
     views

    Scala中更高的键控类型[重复]

    这个问题在这里已有答案: What is a higher kinded type in Scala? 4个答案 我正在阅读Scala书中的函数式编程和Monoids章节,他们讨论了一个如下所示的Monoid接口: trait Monoid[A] { def op(a1: A, a2: A): A def zero: A } 稍后,他们通过扩展此接口来定义特定的Monoid实例 . 例如...
  • 0 votes
     answers
     views

    没有观察到更高的金属类型

    我正在做一些看起来应该相当简单的事情:尝试实现为具有两个类型参数的集合定义的类型类,使用较高级的类型作为类型类的类型参数 . 这里值得注意的复杂性是集合类型上有一个类型绑定 . 我希望在类型类实现体中,scala编译器应该能够根据提供的类型类型参数推断出方法的返回类型......也许这在代码中会更清楚: import language.higherKinds class BaseDemo[T...
  • 2 votes
     answers
     views

    较高程度的高级类型?

    我刚刚学会了更高级的kinded类型,但我提供的每个例子都只使用了_2种 (* -> *) -> * ,如 Functor . 在Scala中,使用了一个奇怪的 trait 定义,在Haskell中使用了 type classes . 而且这两种方法似乎都无法在一度抽象中起作用(即 ((* -> *) -> *) -> * ) . 我既不是Scala也不是Hask...
  • 34 votes
     answers
     views

    参数多态与高等级类型有什么区别?

    我很确定他们不一样 . 然而,我陷入了一种常见的观念,即"Rust does not support"更高级的类型(HKT),而是提供参数多态性 . 我试图了解这一点并理解它们之间的区别,但却变得越来越纠结 . 根据我的理解,Rust中有更高级的类型,至少是基础知识 . 使用"*" -notation,HKT确实有一种例如 * -> * . 例如, ...
  • 228 votes
     answers
     views

    什么是Scala中更高级的kinded类型?

    您可以在网上找到以下内容: Higher kinded type == type constructor? class AClass [T] //例如,类List [T] 有人说这是一种更高的kinded类型,因为它抽象了符合定义的类型 . 更高级的kinded类型是采用其他类型并构造新类型的类型 这些虽然也称为类型构造函数 . (例如,在Programming in Scala中...

热门问题