- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
依赖对如何输入 Sigma来自singletons使用库吗?
假设存在以下类型索引列表和复制函数:
data Vect :: Nat -> Type -> Type where
VNil :: Vect 0 a
VCons :: a -> Vect n a -> Vect (n + 1) a
replicateVec :: forall n a. Sing n -> a -> Vect n a
(您可以在 this question 中找到 replicateVec
的几种不同实现)。
我想创建一个函数 replicateVecSigma
返回 Vect
在依赖对中。理想情况下,它应如下所示:
replicateVecSigma :: Natural -> Sigma Nat (\n -> Vect n String)
如何Sigma
可以用来写这个函数吗?那么函数的类型怎么写呢?
实际上,我能够实现replicateVecSigma
如下,但看起来不太干净:
data Foo a b (m :: TyFun Nat Type)
type instance Apply (Foo a b) (n :: Nat) = a n b
replicateVecSigma :: Natural -> Sigma Nat (Foo Vect String)
replicateVecSigma i =
case toSing i of
SomeSing snat -> snat :&: replicateVec snat "hello"
不幸的是我必须声明这个Foo
类型和 Apply
实例只是为了使用 Sigma
。是否 singletons
库提供了任何方式来使用 Sigma
更容易吗?
你可以找到我的完整代码here .
<小时/>为了完整起见,这里是 Sigma
的定义:
data Sigma (s :: Type) :: (s ~> Type) -> Type where
(:&:) :: forall s t fst. Sing (fst :: s) -> t @@ fst -> Sigma s t
这里是 ~>
:
type a ~> b = TyFun a b -> *
data TyFun :: * -> * -> *
instance (SingKind k1, SingKind k2) => SingKind (k1 ~> k2)
type instance Demote (k1 ~> k2) = Demote k1 -> Demote k2
class SingKind k where
type family Demote k :: * = r | r -> k
fromSing :: forall (a :: k). Sing a -> Demote k
toSing :: Demote k -> SomeSing k
这里是 @@
:
type a @@ b = Apply a b
type family Apply (f :: k1 ~> k2) (x :: k1) :: k2
singletons
为 Apply
定义了一堆实例.
这是上面的三个问题:
Sigma
编写一个类似 replicateVecSigma :: Natural -> Sigma Nat (\n -> Vect n String)
的函数?replicateVecSigma
使用Foo
在上面输入,但这似乎是太多额外的工作。有没有更简单的方法?TyFun
和Apply
工作?最佳答案
去功能化是解决缺少一流函数的通用方法(事实上,它最初是作为一种消除这些函数的编译技术而被发现的),将它们编码为由单个一阶 Apply
函数解释的符号。
例如,您的 Foo a b
是一个对函数 \n -> a n b
进行编码的符号。
获得等效符号的另一种方法是遵循 (\n -> a n b) = 翻转 a b
的直觉。
请注意,像 Vec
这样的类型构造函数本身并不是可以传递给 Apply
的符号,但必须包装在“符号构造函数”中:TyCon2 Vec
是 \n ->\b -> Vec n b
的符号。
单例有一个表示flip
的符号,FlipSym0
(符号可以通过将其他符号作为参数来代表高阶函数)。
Foo a b = Apply (Apply FlipSym0 (TyCon2 a)) b
请注意,部分应用程序会减少为其他符号:
= Apply (FlipSym1 (TyCon2 a)) b
= FlipSym2 (TyCon2 a) b
<小时/>TyFun
类型是一种为非功能化符号提供类型的方法。我看到的主要好处是类型推断;如果没有它,类型家族可能会陷入困惑的境地。
另请参阅 Richard Eisenberg 撰写的有关 Haskell 类型去功能化的博文:https://typesandkinds.wordpress.com/2013/04/01/defunctionalization-for-the-win/
关于haskell - 如何使用单例库中的依赖对类型 Sigma?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828236/
我有这个页面 #container { max-width: 800px; height: 800px; margin: auto; } sig
如何增加 sigmajs 中边缘箭头的大小?我有这段代码。 s = new sigma({ graph: g, container: 'network-graph', renderer: {
我已经使用了 enableEdgeHovering: true 但悬停仍然不起作用?我只想在悬停时显示标签,否则隐藏边缘标签 最佳答案 s = new sigma({ graph:
在我的网站上,我通过使用 sigma.parsers.gexf 定位容器和将图形加载到其中。 Javascript 代码与您在 sigma.js website 中找到的相同: sigma.
Getting timedout error while calculating the value of sigma notation sigma(i=1 to k)((-1)^i+1)(i)(i+
我如何找到以下代码的时间复杂度: (抱歉添加图片,一旦我可以访问笔记本电脑,我将重新编辑我的问题) 到目前为止我做了什么: 第一个循环迭代 n 次,第二次 i 次和第三次 log(i*j) 次,所以简
依赖对如何输入 Sigma来自singletons使用库吗? 假设存在以下类型索引列表和复制函数: data Vect :: Nat -> Type -> Type where VNil :: V
我想发现 sigma.js,这样我就可以在项目中使用它。我已经知道一点 d3 但通过在互联网上搜索人们提到 sigma 更适合图形,就我而言,例如在图形中数据库 sigma 可能更好。但我进行了搜索,
我有类型 X按种类索引 S具有适用于 X 的几个功能.例如,f转换 X S1至 X S2 (不过,在这个简化的例子中它不使用 X S1)。 {-# LANGUAGE DataKinds, GADTs,
我编写了这段代码来计算正除数的总和,并且所有值都必须是 a 的幂。 例如: sigma(0,14) = 1^0 + 2^0 + 7^0 + 14^0 = 4; sigma(2,12) = 1^2 +
从 https://github.com/jacomyal/sigma.js 下载 sigma.js zip尝试 gexf 文件的基本加载。不幸的是,html-load-external-gexf.h
我们如何在 Sigma.js 上显示边缘标签? 我知道 show edge label in sigma.js . 但是代码尚未与主干版本合并。 最佳答案 现在可以使用 sigma 存储库中的新插件来
鉴于下面的示例数据 sampleDT ,其中包含 mean1 到 mean10 的均值和标准差 sd2 ,我将不胜感激任何帮助来创建一个函数: for each column of means mea
我正在使用 Infragistics UltraWinGrid 并希望能够显示多个列的总和。我通过允许行摘要来实现它。然而,我只希望他们能够看到总和,而不是在标题中看到所有这些伴随着那个小 sigma
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
如果我将 Gephi 图导出到 sigma-js并在本地加载它,一切都很完美,但是如果我将内容上传到http存储(即公共(public)dropbox或其他),则ascii以外的字符将显示垃圾。 我认
我使用 sigma.js 和 Angular js 来构建我的可视化 Web 应用程序。 问题陈述:我以这样的方式编写代码,当过滤条件发生变化时,将触发过滤模块根据用户选择过滤掉节点(参见下面的代码)
我定义了一个 Sygma-Type,如下所示: { R : nat -> nat -> bool | Reflexive R } 我有两个元素 r1 r2 : { R : nat -> nat ->
我正在使用 sigma.js 来显示一个相当大的图表。当用户双击节点时,我希望相机放大所单击的节点 - 值得庆幸的是,这是开箱即用的。但是,我还希望在双击节点时重新绘制图形:我希望以所选节点为重心重新
它seems to be impossible提取构造微积分上西格玛的第二个元素。此外,似乎没有已知的、简单的方法可以在不失去一致性的情况下通过相关消除来扩展构造微积分。因此,如何利用一个简单但不一致
我是一名优秀的程序员,十分优秀!