- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何确定 Haskell 类型在给定平台上是否具有等效的 Coercible 实例?
我刚刚被告知 Coercible
在 GHC 7.8 中,这看起来很棒。在这种情况下,我想解决我的具体问题的一个同样好的问题是:有没有办法询问 GHC 哪些类型对 a
, b
有一个Coercible a b
例如(在当前平台上,比如说)?
在我看来,对于 coerce :: Coercible a b => a -> b
为了在与编译器和平台无关的程序中有用,需要知道——最好只在编译时,但也可能在编写代码时明确知道——给定的 Coercible a b
实例存在于给定平台上,否则使用较慢的非 noop 回退(我猜是通过 CPP)。
追问: GHC提供功能是否有意义
coerceOrConvert :: (a -> b) -> a -> b
coerceOrConvert f
的属性是
coerce
如果有 Coercible a b
当前 GHC 版本和平台的实例 f
如果不是 Coercible
看起来很不寻常,所以我很难说……
最佳答案
通常在 Haskell 中处理的强制类型有两种:表示相等(通过 newtype
和 Coercible
)和关于类型变量的新信息(通过 Typeable
)。第二种类型与运行时表示关系不大,所以我只描述Coercible
。/newtype
机制。
保证newtype
仅更改类型信息而不更改底层表示,因此如果我们有(标准示例)
newtype Age = Age { unAge :: Int }
instance Num Age where
Age a + Age b = Age (a + b)
...
(+)
一样快在
Int
是---即幕后没有指针间接进行。事实上,GHC 消除了
Age
构造函数在这里没有任何困难。当我们想做类似的事情时,挑战就来了
map Age :: [Int] -> [Age]
Int
和
Age
在结构上是相同的,这也应该是一个空操作——我们要做的就是在编译时满足类型系统,然后扔掉
map Age
在运行时运行。可悲的是,自从
map
以来,情况并非如此。即使它在每个阶段什么都不做,它仍然会遍历我们的列表。
newtype
的情况下s 被抛出,但我们也希望 GHC 生成您可能会看到(危险,小心)使用
unsafeCoerce
的最严格的编译代码
unsafeCoerce :: [Int] -> [Age]
unsafeCoerce
是“安全的”,因为我们知道这两种类型在运行时是相同的。此外,由于
unsafeCoerce
纯粹在类型级别上运行,并且在运行时是真正的无操作,我们知道这与
map Age
不同。 ,
unsafeCoerce
是真正的
O(0)
强制。
Coercible
希望通过允许像这样的实例化来解决这个问题
instance Coercible a b => Coercible [a] [b] where coerce = unsafeCoerce
coerce
仅在安全时使用,不像
unsafeCoerce
.为确保这种情况,
Coercible
的恶意实例一定不可能出现。被 build 。为此所有
Coercible
实例由编译器基于
newtype
的使用构建。 .
Coercible
作品你必须了解新的 Haskell 角色系统,它允许开发人员注释
newtype
应该允许强制。这在 [
Coercible
的文档中] 有明确的概述。类] (
http://www.haskell.org/ghc/docs/7.8.1-rc2/html/libraries/base-4.7.0.0/Data-Coerce.html)。
关于具有与其 C 对应物相同的强制表示的 Haskell 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459318/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!