- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有时,如果没有至少一个语言扩展,我想编写的一段代码是不合法的。当试图在研究论文中实现想法时尤其如此,这些论文倾向于使用撰写论文时可用的任何漂亮的、超扩展的 GHC 版本,而没有明确说明实际需要哪些扩展。
结果是我经常在我的 .hs 文件的顶部得到这样的东西:
{-# LANGUAGE TypeFamilies
, MultiParamTypeClasses
, FunctionalDependencies
, FlexibleContexts
, FlexibleInstances
, UndecidableInstances
, OverlappingInstances #-}
UndecidableInstances
是安全的,因为虽然它可能会导致编译器不终止,但只要代码编译它就不会产生意想不到的副作用。 OverlappingInstances
显然是不安全的,因为它让我很容易不小心编写出运行时错误的代码。 Is there a list of GHCextensions which are considered 'safe' and which are 'unsafe'?
最佳答案
最好看一下SafeHaskell允许:
Safe Language
The Safe Language (enabled through
-XSafe
) restricts things in two different ways:
- Certain GHC LANGUAGE extensions are disallowed completely.
- Certain GHC LANGUAGE extensions are restricted in functionality.
Below is precisely what flags and extensions fall into each category:
- Disallowed completely:
GeneralizedNewtypeDeriving
,TemplateHaskell
- Restricted functionality:
OverlappingInstances
,ForeignFunctionInterface
,RULES
,Data.Typeable
- See Restricted Features below
- Doesn't Matter: all remaining flags.
Restricted and Disabled GHC Haskell Features
In the Safe language dialect we restrict the following Haskell language features:
ForeignFunctionInterface
: This is mostly safe, but foreign import declarations that import a function with a non-IO type are be disallowed. All FFI imports must reside in the IO Monad.RULES
: As they can change the behaviour of trusted code in unanticipated ways, violating semantic consistency they are restricted in function. Specifically anyRULES
defined in a moduleM
compiled with-XSafe
are dropped.RULES
defined in trustworthy modules thatM
imports are still valid and will fire as usual.OverlappingInstances
: This extension can be used to violate semantic consistency, because malicious code could redefine a type instance (by containing a more specific instance definition) in a way that changes the behaviour of code importing the untrusted module. The extension is not disabled for a moduleM
compiled with-XSafe
but restricted. WhileM
can define overlapping instance declarations, they can only be used inM
. If in a moduleN
that importsM
, at a call site that uses a type-class function there is a choice of which instance to use (i.e overlapping) and the most specific choice is fromM
(or any other Safe compiled module), then compilation will fail. It is irrelevant if moduleN
is considered Safe, or Trustworthy or neither.Data.Typeable
: We allow instances ofData.Typeable
to be derived but we don't allow hand crafted instances. Derived instances are machine generated by GHC and should be perfectly safe but hand crafted ones can lie about their type and allow unsafe coercions between types. This is in the spirit of the original design of SYB.In the Safe language dialect we disable completely the following Haskell language features:
GeneralizedNewtypeDeriving
: It can be used to violate constructor access control, by allowing untrusted code to manipulate protected data types in ways the data type author did not intend. I.e can be used to break invariants of data structures.TemplateHaskell
: Is particularly dangerous, as it can cause side effects even at compilation time and can be used to access abstract data types. It is very easy to break module boundaries with TH.
FunctionalDependencies
的交互和
UndecidableInstances
也可能是不安全的,因为除了允许无限的上下文堆栈深度
UndecidableInstances
也解除所谓的
coverage condition (第 7.6.3.2 节),但目前我找不到此引用。
GeneralizedNewtypeDeriving
不再不安全。 (我不确定还有什么可能发生的变化。)
关于haskell - 是否有被视为 'safe' 的 GHC 扩展列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830757/
我偶然发现了 Wikipedia 上的线程安全文章;它区分了几个安全级别,尤其是: Thread safe: Implementation is guaranteed to be free of ra
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
我正在尝试使用 FCM 和 https://www.simplifiedcoding.net/firebase-cloud-messaging-android/ 上提供的教程向我的应用程序添加通知服务
我正在 VB.net 中寻找“安全”点符号。这样的事情是否存在——在 VB.NET 或任何语言中?我希望能够做的是,在使用 non-nullable 遗留对象时,解决如下问题: “如果有计划,如果有案
我在我的机器上使用 Windows 10 家庭单语言版,这是一个 64 位操作系统。 我已经安装了最新版本的 XAMPP,它在我的机器上安装了 PHP 7.2.7。 我是根据摘自 PHP Manual
我在 XmlDocument class documentation 中看到在 MSDN 上 Any public static ( Shared in Visual Basic) members o
例如,我经常想用 SELECT whatever FROM questions WHERE views * N + votes * M > answers AND NOT(answered) O
在DataStax收购Aurelius之后,自从Titan 1.0.0在2015年9月发布以来,自那时以来几乎没有提交过,所以我想知道在生产中使用TitanDB是否安全。谁能给我一些见识? 最佳答案
给定一个文件: dept4.abc.edu dept3.abc.edu dept2.abc.edu dept1.abc.edu 我知道如何使用以下命令获取从底部开始的第三行: tail -3 file
SELECT TO_NUMBER('*') FROM DUAL 这显然给了我一个异常(exception): ORA-01722: invalid number 有没有办法“跳过”它并获取 0 或 N
我不是在问这些是否真的是随机的。我只是想知道如果两个用户同时点击一个页面他们可以获得相同的随机数吗?我在想,如果我在多核服务器上运行它,我会因为同步或其他原因在很长一段时间内生成相同的随机数吗? pu
我有一个服务器存储来自客户端的数据。每个客户端都在自己的线程中工作,并且拥有一个数据对象。 这个数据对象是一个自定义类,让我们调用包含非特定数据的 Data.java,这可能是一些字节,但通常约为 1
我正在开发一个应用程序,其中我有一个包含 5000 行和 4 列的数据库。 problem_id (int) problem_no (string) problem_title (string) da
我有一个表,其中每行的字段数据都不完整,我想要修复。 这就是我的意思: mysql> CREATE TABLE test ( key INT a CHAR(1),
这个问题已经有答案了: How do JavaScript closures work? (86 个回答) 已关闭 6 年前。 所以,这个代码片段工作起来非常方便,但我对它的工作方式感到有点惊讶。 v
我想 compile C++ extensions to SQL Server , 来自文档 Safe mode: Run verifiably typesafe code; compiled wit
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便它可以重新打开,visit the help center。 关
这种互斥模式是否像我认为的那样安全?如果是这样,你怎么调用它? lock (_lock) { if (_flag) return; else _flag = true; } try {
假设您使用 EntityFramework 作为 ORM,所有这些都封装在一个单独的 DAL 类库中。 您在另一个“公共(public)”类库中有以下 POCO 对象,它在您的 DAL、SL 和表示层
我是一名优秀的程序员,十分优秀!