- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Haskell 中的依赖类型进行试验,并在 paper 中遇到以下情况“单例”套餐:
replicate2 :: forall n a. SingI n => a -> Vec a n
replicate2 a = case (sing :: Sing n) of
SZero -> VNil
SSucc _ -> VCons a (replicate2 a)
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Singletons
import Data.Singletons.Prelude
import Data.Singletons.TypeLits
data V :: Nat -> * -> * where
Nil :: V 0 a
(:>) :: a -> V n a -> V (n :+ 1) a
infixr 5 :>
replicateV :: SingI n => a -> V n a
replicateV = replicateV' sing
where replicateV' :: Sing n -> a -> V n a
replicateV' sn a = case sn of
SNat -> undefined -- what can I do with this?
Sing
Nat
的实例没有
SZero
或
SSucc
.只有一个构造函数叫做
SNat
.
> :info Sing
data instance Sing n where
SNat :: KnownNat n => Sing n
STrue
和
SFalse
,例如在以下(无用的)示例中:
data Foo :: Bool -> * -> * where
T :: a -> Foo True a
F :: a -> Foo False a
foo :: forall a b. SingI b => a -> Foo b a
foo a = case (sing :: Sing b) of
STrue -> T a
SFalse -> F a
fromSing
获取基本类型,但这当然允许 GHC 检查输出向量的类型:
-- does not typecheck
replicateV2 :: SingI n => a -> V n a
replicateV2 = replicateV' sing
where replicateV' :: Sing n -> a -> V n a
replicateV' sn a = case fromSing sn of
0 -> Nil
n -> a :> replicateV2 a
replicateV
?
SNat
的方法不起作用。但即使使用
type-natural
库,我无法实现
replicateV
对于
V
数据类型
使用 GHC 的内置 Nat
类型 .
replicateV :: SingI n => a -> V n a
replicateV = replicateV' sing
where replicateV' :: Sing n -> a -> V n a
replicateV' sn a = case TN.sToPeano sn of
TN.SZ -> undefined
(TN.SS sn') -> undefined
n
是
0
或不。例如,以下给出了编译器错误:
replicateV :: SingI n => a -> V n a
replicateV = replicateV' sing
where replicateV' :: Sing n -> a -> V n a
replicateV' sn a = case TN.sToPeano sn of
TN.SZ -> Nil
(TN.SS sn') -> undefined
src/Vec.hs:25:28: error:
• Could not deduce: n1 ~ 0
from the context: TN.ToPeano n1 ~ 'TN.Z
bound by a pattern with constructor:
TN.SZ :: forall (z0 :: TN.Nat). z0 ~ 'TN.Z => Sing z0,
in a case alternative
at src/Vec.hs:25:13-17
‘n1’ is a rigid type variable bound by
the type signature for:
replicateV' :: forall (n1 :: Nat) a1. Sing n1 -> a1 -> V n1 a1
at src/Vec.hs:23:24
Expected type: V n1 a1
Actual type: V 0 a1
• In the expression: Nil
In a case alternative: TN.SZ -> Nil
In the expression:
case TN.sToPeano sn of {
TN.SZ -> Nil
(TN.SS sn') -> undefined }
• Relevant bindings include
sn :: Sing n1 (bound at src/Vec.hs:24:21)
replicateV' :: Sing n1 -> a1 -> V n1 a1 (bound at src/Vec.hs:24:9)
SNat
做任何有用的事情.
最佳答案
这里有两个自然的概念。一种是“literal naturals”(即 0、1、2 等),另一种是“Peano naturals”(即 Z、S Z、S (S Z) 等)。论文使用的显然是 Peano naturals,但单例使用的是字面自然。
值得庆幸的是,还有一个名为 type-natural 的包。它定义了 Peano naturals 以及 conversion to literal naturals和 conversion from literal naturals .
关于haskell - 如何解构 SNat(单例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905744/
我正在使用 Haskell 中的依赖类型进行试验,并在 paper 中遇到以下情况“单例”套餐: replicate2 :: forall n a. SingI n => a -> Vec a n r
我在基于 Azure 应用服务的 API 之一中遇到 SNAT 耗尽问题: 我们的 HTTPClient 被写入一个单例中,该单例应该仅实例一次(C#/.net 4.72)... public
我在基于 Azure 应用服务的 API 之一中遇到 SNAT 耗尽问题: 我们的 HTTPClient 被写入一个单例中,该单例应该仅实例一次(C#/.net 4.72)... public
我们认为 Cloud Foundry 中的一组虚拟机存在 Azure SNAT 耗尽问题。这些机器不经过负载平衡器。 我已经浏览过这份文件: https://learn.microsoft.com/e
我正在调查高级 Azure Web 应用程序 (P1V2) 中托管的 .NET Web 应用程序中引发的套接字异常。出站流量配置为通过 VNET 和 NAT 网关(单个公共(public) IP)。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
Der Azure 网络专家, 我们的 Web 应用程序经常耗尽出站 TCP 连接。大多数出站连接实际上是 Azure 内部连接(SQL、BlobStore、后端服务)。但我们还没有虚拟网络和专用端点
我有一个nodejs代码触发sendgrid电子邮件给1000多个用户。当用户数量较少(100-200)时,效果很好。但是,当用户数量超过 1000 时,它会在某个时刻失败,并且不会触发其余邮件。当我
我可以使用 SomeSing 来动态生成单例,然后对它们进行模式匹配,从而能够做一些有趣的事情,效果很好 > let x = SomeSing SFalse :: SomeSing ('KProxy
我有一个nodejs代码触发sendgrid电子邮件给1000多个用户。当用户数量较少(100-200)时,效果很好。但是,当用户数量超过 1000 时,它会在某个时刻失败,并且不会触发其余邮件。当我
我是一名优秀的程序员,十分优秀!