- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对数据类型名称进行一些浅层打印,但我不确定如何使用 Generics-SOP 执行此操作。
对于我有新类型列表的情况,我可以相当轻松地打印出我需要的内容:
class GTypeName f where
gtypeName :: g f -> String
instance (HasDatatypeInfo a) => GTypeName (SOP I ('[ '[], '[a, [a]] ])) where
gtypeName _ = "(Array " ++ name ++ ")"
where
name = datatypeName $ datatypeInfo (Proxy @ a)
如您所见,我正在匹配 List 类型并使用内部 a
的数据类型信息来获取名称。但我不知道如何处理我想获取实际的顶级构造函数名称本身的情况。
在 GHC 泛型中,我执行了以下操作:
instance (GTypeName f) => GTypeName (D1 m f) where -- peer inside
gtypeName _ = gtypeName (Proxy @ f)
-- go into the Cons constructed type
instance {-# OVERLAPPING #-} (GTypeName f) => GTypeName (C1 ('MetaCons ":" g s) f) where
gtypeName _ = gtypeName (Proxy @ f)
-- return the constructor name here
instance (KnownSymbol n) => GTypeName (C1 ('MetaCons n g s) f) where
gtypeName _ = symbolVal (Proxy @ n)
-- take the left side, as this is the result of a type product from Cons
instance (GTypeName a) => GTypeName (a :*: b) where
gtypeName _ =
gtypeName (Proxy @ a)
-- match on array and take it out here
instance (GTypeName b) => GTypeName ((C1 ('MetaCons "[]" g s) f) :+: b) where
gtypeName _ = "(Array " ++ gtypeName (Proxy @ b) ++ ")"
这最终与新类型和某些数据类型一起使用,如下所示:
newtype Status = Status Text
newtype OpenRequest = OpenRequest
{ path :: Path
}
data Route req res = Route
{ method :: Method
, url :: Url
}
open :: Route OpenRequest Success
open = Route {method = POST, url = Url "/api/open"}
最佳答案
您可以使用 generics-sop 获取值的顶级构造函数名称,如下所示:
constructor ::
forall a .
(Generic a, HasDatatypeInfo a) => a -> String
constructor a =
hcollapse $
hzipWith
(\ con _args -> K (constructorName con))
(constructorInfo (datatypeInfo (Proxy @a)))
(unSOP $ from a)
这里,constructorInfo ...
为您提供一个包含相关数据类型的所有构造函数名称的产品。然后,hzipWith
调用会选择给定值 a
所属的构造函数。
示例:
GHCi> constructor True
"True"
GHCi> constructor (Just 3)
"Just"
GHCi> constructor [1,2,3]
":"
不幸的是,我并不完全清楚你想用列表类型做什么,所以我无法展示如何将其与你已有的代码结合起来。
关于haskell - SOP表示转换后如何从类型中获取数据类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872179/
我在 .sops.yaml 中找不到如何将 Azure Keyvault 与 Mozilla SOPS 结合使用的示例。我在网上看到并在此处提供的所有示例 https://github.com/moz
我在阅读时有两个问题 DICOM标准: 在 DICOM 文件中,(0002 0003)“媒体存储 SOP 实例 UID”和 (0008 0018) “SOP Instance UID”,它们是一样的吗
import java.util.HashSet; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; impor
过去 5 个月我一直在开发 gwt 应用程序,现在是第三方人员开始使用它的时候了。为了准备这个,他们中的一个在反向代理后面设置了我的应用程序,这立即导致浏览器的同源策略出现问题。我猜响应 header
SOP(同源策略)的真正含义是什么? 我知道这意味着来自一个来源的 Javascript 代码无法访问来自另一个来源的资源。但是“资源”这个词到底是什么意思呢?例如: Javascript 代码可以从
我在维基百科上读到了同源政策的含义,但不明白它是如何运作的。我确实知道它会阻止我网站上的 javascript 与单独网站上的脚本进行交互,但这到底是什么意思? 最佳答案 如果您的脚本 (JS) 尝试
我写了一个html游戏,我将html文件打包在ios应用程序中。 ios 应用程序只会从磁盘加载页面并将其呈现在 UIWebView 中。 此设置是否适用同源策略限制(假设是)? 例如,我希望游戏能够
我目前正在开发一个 Web 应用程序(在 golang 中),它将用作其他内部应用程序(在 docker 容器中运行)的主要门户。这个 web 应用程序应该简单地提供一个 HTML 页面,其中导航栏位
我将如何推导函数 getField :: (Generic a, HasDatatypeInfo a) => Proxy (name :: Symbol) -> a -> b 使用类型级字符串( Sy
当我尝试将 Paho MQTT javacrript 与 Mosquito MQTT websockets 一起使用时,只要我用来服务页面的 Web 服务器和 Mosquito 位于同一服务器(同一来
所以我尝试使用我必须为学校编写的代码: public class QuizScore { private int qs[]; EasyReader d = new EasyReader(); publ
同源策略阻止我从另一个网站(经许可)获取我需要的 JSON 数据。我看到一个人正在使用 JsonpRequestBuilder 解决这个问题,但我不确定这是否是适合我的最佳解决方案。我想到的唯一其他选
在 Chrome 扩展中,我试图让 gmail 撰写正文内容。 偶尔会跳出一个错误,但不会妨碍它的工作。 这是作为内容脚本运行的。我相信权限在这里不是问题,因为当缺少权限时,错误会有所不同并且操作会被
我想在我的 Windows 机器上开发 JavaScript。您知道我可以关闭同源策略以便在本地开发的浏览器吗? Firefox 将是最佳选择。 或者,如果您知道我可以用于 SOAP/WSDL 站点的
是否有模仿 SYB 的 generics-sop/everywhere 行为的 mkT 示例? 我正在尝试做的,但没有看到如何成功地做到这一点,是将 everywhere (mkT fixupSymb
我目前通过 Helm chart 在我的集群中安装了 Flux 和 Helm 操作符。通量部署正在监控一个 git 存储库,其中我有一个 .flux.yaml,我通过通量部署 git-path 传递文
我对同源策略 (SOP) 感到困惑。 例如,http://bad.com/bad.html与 bad.js ,和http://good.com/good.html与 good.js 。我在 Chrom
This is supposed to have a Processor, Expression, Sum, Number and Product class. Processor execute E
我看过一些关于这个主题的帖子。 由于某种原因,从 JavaScript 到 Picasa(即 XHR 基础、jQuery/AJAx 等)的 POST 调用由于 SOP(同源策略)而失败。 我确实进行了
我正在做 XSHM(跨站点历史记录操作)项目。 我试图展示使用 XSS(跨站脚本)如何违反 SOP。我已经在沙箱 XP 机器内设置了一个本地主机(WAMP)服务器(必须符合道德规范),并使用一个简单的
我是一名优秀的程序员,十分优秀!