问题标签 [higher-kinded-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
528 浏览

scala - 在 scala 中定义 Haskell FixF

所以comonad.com 有一系列关于使用应用程序的有趣文章,我一直在努力将我能做的带到scala(为了好玩和学习)。所以,haskell 定义了 FixF——</p>

它是这样写的,”FixF是一种((* -> *) -> * -> *) -> * -> *)。它需要一个“二阶仿函数”(一个将仿函数发送到另一个仿函数的仿函数,即hask仿函数类别上的内仿函数)的固定点,以恢复标准的“一阶仿函数”函子“退出。”

现在我看到了这个

和这个

所以它不是第一个修复(错误的种类)是第二个吗?我不认为种类是正确的

是吗 -

是吗 ?

如果是这样,我很想看到正确的定义和函子

现在奖金问题,有人可以定义应用程序吗?

0 投票
2 回答
431 浏览

haskell - 将 Type.Equality 与 PolyKinds 一起使用

此编译代码是该代码的最小化示例,来自使用 syntactic-2.0对此问题的回答。我也在使用sameModType派生自的定义sameNat从Data.Type.Equality

我一直在毫无问题地使用这个解决方案,但是我想让模数q成为一种多态的,具体目标是使其Proxy (nat :: Nat)成为 just nat :: Nat(同时仍然能够使用 kind 的模数*)。

但是当我在-XPolyKinds上面的代码中添加扩展时,我得到了几个编译错误:

我对类型相等中发生的魔法知之甚少,不知道如何解决这个问题。似乎大多数有问题的类型都无法强制执行 GHC 要求的约束,但我以前从未遇到过此类问题PolyKinds。需要改变什么才能使代码编译PolyKinds

0 投票
1 回答
111 浏览

scala - 如何让子类型拥有参数要求更严格的方法

我正在尝试在 Scala 中实现 Monads,但遇到了一个我不知道是否可以解决的问题:

示例代码为(不编译,仅供参考):

我的问题出在方法上

我希望它以这样一种方式定义,即当一个特征继承 Monad(例如 State)时,该方法将是


换句话说,我想知道是否可以在 trait 中定义一个方法,使其强制参数成为当前类型的子类型

0 投票
0 回答
211 浏览

scala - scala 中的 Phoas - 盒子比香蕉便宜

https://www.fpcomplete.com/user/edwardk/phoas

一些背景代码

阅读那篇文章我觉得我明白了要点,但是我在 scala 中实现时遇到了麻烦,特别是如何转换 Rec[F, C, D] { runRec[R] = { ?!?!?! 我真的很想得到这个所以如果你能解释如何转换它

进入

我认为......任何方式的任何和所有帮助都非常感谢,并且非常喜欢细节。谢谢你

0 投票
1 回答
406 浏览

haskell - PolyKinds 的模棱两可的类型

以下编译没有 PolyKinds

的所有外观都是代表模算术 modzq的某种类型(种类) 。用它来表示这些模数会很方便。如果我在类型族中添加和多类模量:*qNatsPolyKinds

GHC 7.8 抱怨:

添加PolyKinds 真的使这个模棱两可吗?歧义在哪里?还相关:-XAllowAmbiguousTypes 何时合适?

如果我向 GHC 扔骨头并将AllowAmbiguousTypes错误从 GADT 的声明移动到 GADT 的使用(没有添加扩展的建议):

这让我觉得使用AllowAmbiguousTypes的是 GHC 红鲱鱼。

编辑

为了澄清,上面的类型可能被实例化如下:

然后zq ~ (Zq 3), q ~ 3, 和Modulus (Zq 3) ~ 3, Foo (Zq 3) 3 ~ (Zq 3)(我将工作从类型家族中剥离出来Foo,所以将其视为身份。)

0 投票
2 回答
2135 浏览

scala - “通用类型”和“高级类型”有什么区别?

我发现自己真的无法理解“通用类型”和“高级类型”之间的区别。

斯卡拉代码:

我定义了一个trait名字是 的Box,它是一个接受参数类型的类型构造函数T。(这句话对吗?)

我也可以说:

  1. Box是泛型类型
  2. Box是高级类型
  3. 以上都不是正确的

当我与同事讨论代码时,我经常在“通用”和“高级”两个词之间挣扎来表达它。

0 投票
1 回答
106 浏览

scala - 带有和不带 '_' 的高级类型构造函数

这个签名声明了更高种类的类型:

现在,我可以创建它的实例:

我也可以声明MyContainer为:

它产生与以下相同的实例mc1

这些方法有什么区别,什么时候应该使用?

0 投票
1 回答
195 浏览

scala - 高阶 kleisli (scala) 中的类型相等

迄今为止的故事——

...

问题,

现在就这一切而言,有两个目标,首先我有兴趣在 scala 中实现 2 类(到目前为止我已经非常成功{我认为程序可能是由在合适的类别中绘制和组合图表 Scala 具有我观察到的 BiCCC 2-Category 结构(至少我很确定)}),第二个通用编程,Free Monad 是更高阶的 monad HMonadyoneda 和 coyoneda 有HFunctor实例,并且我想知道 aHKleisli会是什么样子。

现在,我遇到了A参数相互遮蔽并创建 F[A]-not-F[A] 问题的问题。现在我的第一个想法是添加一个隐式Leibniz[F[A], F[A']](A' 是伪代码)并使用,希望我可以用它来见证 [A]F[A] [A']F[A'] 的相等性,但我没有'还没有弄清楚它是如何工作的,或者它是否足够,我也想知道我是否只是在这个问题上钻了太久,并且错过了一些明显的重写,这些重写让我到达了我想要去的地方我在这里向好人开放。我希望能提供任何帮助,并尽可能详细地说明如何实现这一点,我希望能分享关于高阶分类抽象的任何想法。

0 投票
1 回答
259 浏览

java - Java Generic 获取类型参数

在 Scala 中,您可以这样定义一个类:

在这段代码中,类型参数T1代表一个需要一个类型参数的类型T2,所以我们可以创建一个类似的实例new MyClass[List]

我想用Java做这个,但我不知道。

我想知道在 Java 中是否有可能,如果没有,我想知道如何在 Java 中做这件事。

据我了解,泛型类型本质上是类型的函数。因此,如果您有一个类似 的类List<T>,您可以认为该类List是一个类型的函数,因此List接受一个类似的类型参数Integer,那么它将是一个具体类型,例如整数列表(List<Integer>)。

MyClass上面需要一个类型参数T1,但我希望这T1也是一个带类型参数的泛型类型T2,所以我可以创建一个实例,MyClass<List>并且可以使用类型List<Integer>List<Double>内部MyClass。在 Scala 中,如果您尝试MyClass[Int]MyClass[String]将失败,因为IntString不采用类型参数。

当然,如果我允许复制一些代码,这可能没有必要,但要制作更通用的代码,我认为它是必不可少的。

0 投票
1 回答
121 浏览

scala - 使用更高种类的类型时类型不匹配

在库中,有一个具有更高种类类型的类采用一个类型参数。我想给它一个接受两个类型参数的类型,所以我使用一个type表达式来修复另一个参数。

但结果并不像我预期的那样。

代码简化为:

编译时出现错误(Scala 2.11.4):

为什么会出现类型错误?