问题标签 [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.
scala - 在 scala 中定义 Haskell FixF
所以comonad.com 有一系列关于使用应用程序的有趣文章,我一直在努力将我能做的带到scala(为了好玩和学习)。所以,haskell 定义了 FixF——</p>
它是这样写的,”FixF
是一种((* -> *) -> * -> *) -> * -> *)
。它需要一个“二阶仿函数”(一个将仿函数发送到另一个仿函数的仿函数,即hask仿函数类别上的内仿函数)的固定点,以恢复标准的“一阶仿函数”函子“退出。”
现在我看到了这个
和这个
所以它不是第一个修复(错误的种类)是第二个吗?我不认为种类是正确的
是吗 -
是吗 ?
如果是这样,我很想看到正确的定义和函子
现在奖金问题,有人可以定义应用程序吗?
haskell - 将 Type.Equality 与 PolyKinds 一起使用
此编译代码是该代码的最小化示例,来自使用 syntactic-2.0对此问题的回答。我也在使用sameModType
派生自的定义sameNat
从Data.Type.Equality
我一直在毫无问题地使用这个解决方案,但是我想让模数q
成为一种多态的,具体目标是使其Proxy (nat :: Nat)
成为 just nat :: Nat
(同时仍然能够使用 kind 的模数*
)。
但是当我在-XPolyKinds
上面的代码中添加扩展时,我得到了几个编译错误:
我对类型相等中发生的魔法知之甚少,不知道如何解决这个问题。似乎大多数有问题的类型都无法强制执行 GHC 要求的约束,但我以前从未遇到过此类问题PolyKinds
。需要改变什么才能使代码编译PolyKinds
?
scala - 如何让子类型拥有参数要求更严格的方法
我正在尝试在 Scala 中实现 Monads,但遇到了一个我不知道是否可以解决的问题:
示例代码为(不编译,仅供参考):
我的问题出在方法上
我希望它以这样一种方式定义,即当一个特征继承 Monad(例如 State)时,该方法将是
换句话说,我想知道是否可以在 trait 中定义一个方法,使其强制参数成为当前类型的子类型。
scala - scala 中的 Phoas - 盒子比香蕉便宜
见https://www.fpcomplete.com/user/edwardk/phoas
一些背景代码
阅读那篇文章我觉得我明白了要点,但是我在 scala 中实现时遇到了麻烦,特别是如何转换 Rec[F, C, D] { runRec[R] = { ?!?!?! 我真的很想得到这个所以如果你能解释如何转换它
进入
我认为......任何方式的任何和所有帮助都非常感谢,并且非常喜欢细节。谢谢你
haskell - PolyKinds 的模棱两可的类型
以下编译没有 PolyKinds
:
的所有外观都是代表模算术 modzq
的某种类型(种类) 。用它来表示这些模数会很方便。如果我在类型族中添加和多类模量:*
q
Nats
PolyKinds
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
,所以将其视为身份。)
scala - “通用类型”和“高级类型”有什么区别?
我发现自己真的无法理解“通用类型”和“高级类型”之间的区别。
斯卡拉代码:
我定义了一个trait
名字是 的Box
,它是一个接受参数类型的类型构造函数T
。(这句话对吗?)
我也可以说:
Box
是泛型类型Box
是高级类型- 以上都不是正确的
当我与同事讨论代码时,我经常在“通用”和“高级”两个词之间挣扎来表达它。
scala - 带有和不带 '_' 的高级类型构造函数
这个签名声明了更高种类的类型:
现在,我可以创建它的实例:
我也可以声明MyContainer
为:
它产生与以下相同的实例mc1
:
这些方法有什么区别,什么时候应该使用?
scala - 高阶 kleisli (scala) 中的类型相等
迄今为止的故事——
...
问题,
现在就这一切而言,有两个目标,首先我有兴趣在 scala 中实现 2 类(到目前为止我已经非常成功{我认为程序可能是由在合适的类别中绘制和组合图表 Scala 具有我观察到的 BiCCC 2-Category 结构(至少我很确定)}),第二个通用编程,Free Monad 是更高阶的 monad HMonad
yoneda 和 coyoneda 有HFunctor
实例,并且我想知道 aHKleisli
会是什么样子。
现在,我遇到了A
参数相互遮蔽并创建 F[A]-not-F[A] 问题的问题。现在我的第一个想法是添加一个隐式Leibniz[F[A], F[A']]
(A' 是伪代码)并使用,希望我可以用它来见证 [A]F[A] [A']F[A'] 的相等性,但我没有'还没有弄清楚它是如何工作的,或者它是否足够,我也想知道我是否只是在这个问题上钻了太久,并且错过了一些明显的重写,这些重写让我到达了我想要去的地方我在这里向好人开放。我希望能提供任何帮助,并尽可能详细地说明如何实现这一点,我希望能分享关于高阶分类抽象的任何想法。
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]
将失败,因为Int
或String
不采用类型参数。
当然,如果我允许复制一些代码,这可能没有必要,但要制作更通用的代码,我认为它是必不可少的。
scala - 使用更高种类的类型时类型不匹配
在库中,有一个具有更高种类类型的类采用一个类型参数。我想给它一个接受两个类型参数的类型,所以我使用一个type
表达式来修复另一个参数。
但结果并不像我预期的那样。
代码简化为:
编译时出现错误(Scala 2.11.4):
为什么会出现类型错误?