Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么GeneralizedNewtypeDeriving不是一个安全的Haskell?

为什么GeneralizedNewtypeDeriving不是一个安全的Haskell?
EN

Stack Overflow用户
提问于 2013-06-16 11:56:06
回答 1查看 4.5K关注 0票数 20

来自GHC手册,安全语言部分

模块边界控制-使用安全语言编译的Haskell代码保证只访问通过其他模块导出列表向它公开提供的符号。其中一个重要部分是,安全编译的代码无法使用它无法导入的数据构造函数来检查或创建数据值。如果模块M通过仔细使用导出列表来建立不变量,那么使用导入M的安全语言编译的代码就可以保证尊重这些不变量。因此,模板Haskell和GeneralizedNewtypeDeriving 在安全语言中被禁用,因为它们可以用于违反此属性.

如何使用GeneralizedNewtypeDeriving破坏模块的不变量

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-16 13:03:24

卢基链接到我的博客文章关于这一主题。基本上,在GHC中实现的GeneralizedNewtypeDeriving假设某种同构(即newtype所隐含的操作无关同构)意味着leibniz相等。这在Haskell 98中是正确的,但在Haskell加上扩展中完全不正确。

也就是说,新类型提供了一对函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a -> b
b -> a

在核心上什么都不做,但不能得出结论

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
forall f. f a -> f b

因为f可能是类型函数或GADT。这是GeneralizedNewtypeDeriving所需的相等形式。

即使在Haskell 98中,它也破坏了模块赏金。你可以有这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class FromIntMap a where
  fromIntMap :: Map Int b -> Map a b

instance FromIntMap Int where
  fromIntMap = id

newtype WrapInt = WrapInt Int deriving FromIntMap

instance Ord WrapInt where
  WrapInt a <= WrapInt b = b <= a

会做坏事..。

我的博客文章展示了如何使用其他扩展(都是安全的)和unsafeCoerce实现GeneralizedNewtypeDeriving. --我对此有更好的理解,并且更有信心的是,如果没有"System“风格的扩展(类型系列,GADT),GeneralizedNewtypeDeriving无法生成unsafeCoerce。窗台,它是不安全的,应该小心使用,如果有的话。我的理解是,Lennart Augustsson (用户augustss)在hbc中实现它的方式非常不同,而且这种实现是安全的。一个安全的实现将是更有限的,更复杂的。

更新:有了新版本的GHC (所有问题都应该从7.8.1开始消失),GeneralizedNewtypeDeriving是安全的,因为有了新的角色系统

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17137111

复制
相关文章
多个checkbox实现单选的checkbox
将多个checkbox添加进一个list中,设置监听,当有一个checkbox被选中时,循环list ,将其他checkbox的选中状态设置为false:
全栈程序员站长
2022/08/30
1.8K0
判断 checkbox 是否选中以及 设置checkbox选中
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154601.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
6K0
radio与checkbox
最近一直在学习Javascript与asp.net MVC4,每天都在跟着书学习。这样总感觉自己看的很抽象,没有点实际的意义。而且,每次看的东西很容易忘记,所以打算在这里记录自己的学习笔记。 Javascript已经看了不少天了,本文主要讲述的是radio与checkbox。 1.radio radio又称单选框,它是html表单中的单选按钮。通常单选按钮是成组出现的,是互斥的,每次只能选取一个。当点击按钮的时候,就会触发onclick事件。通过属性checked判断按钮是否被选中。声明的语法如下:<inp
水击三千
2018/02/27
2.2K0
checkbox选中和不选中的值_设置checkbox选中状态
1.设置选中:$(“#hasApply”).prop(“checked”,true);
全栈程序员站长
2022/08/03
7.8K0
jquery 读取checkbox
html的checkbox控件 是否选中要看有没有checked属性 有就是选中 无论值是什么
ApacheCN_飞龙
2019/02/15
1.3K0
checkbox实现单选
(function(){ (’[name=“XYDJLHFJ”][type=“checkbox”]’).each(function(){ KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: … if((this).attr(‘checked’)){ ( ′ [ n a m e = &quot; X Y D J L H F J &quot; ] [ t y p e = &quot; c h e c k b o x &quot; ] [ n a m e = ′ + (&#x27;[name=&quot;XYDJLHFJ&quot;][type=&quot;checkbox&quot;][name=&#x27;+ (′[name=“XYDJLHFJ“][type=“checkbox“][name=′+(this).attr(“name”)+’]’).removeAttr(‘checked’);
全栈程序员站长
2022/09/02
1.1K0
input:checkbox标签
新建 html 文件 16-checkbox.html ,编写下方程序,运行看看效果吧
鹤川
2023/03/21
1.1K0
checkbox 全选和取消
//全选 $("#checkall").click(function () { if (this.checked) { //如果当前点击的多选框被选中 $('input[type=checkbox][name=checkitems]').prop("checked", true); } else { $('i
纯粹是糖
2018/03/14
1.8K0
ElementUI Checkbox 多选框
https://element.eleme.io/#/zh-CN/component/checkbox
py3study
2021/03/12
2.9K0
ElementUI Checkbox 多选框
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
不过它用起来不怎么样,与其这样还不如参考UWP的ListView实现,而且动画效果也很好看:
dino.c
2020/02/21
2.9K0
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
jquery获取checkbox是否选中
在使用jquery的过程中,发现了一个比较特别的属性,那就是 input标签的 checkbox的 是否选中状态
执笔记忆的空白
2020/12/25
2.8K0
jQuery 实现checkBox全选效果
html/jsp代码: <div class="dlnm"> <input type="checkbox" class="omipt" value="111"> 111 <input type="checkbox" class="omipt" value="222"> 222 <input type="checkbox" class="omipt" value="333"> 333 <input type="checkbox" class="omipt" value=
执笔记忆的空白
2020/12/25
3.5K0
小程序checkbox调整大小
.cb{ transform: scale(0.6,0.6); } <view> <label class="lab" for="box1"> <checkbox value="v1" checked class="cb"/>复选框 </label> </view>
苦咖啡
2018/04/28
4.1K0
checkbox的常见问题
1、在使用checkbox时,最好不要阻止他原有的事件,要利用它原有的事件进行控制 2、尽量使用label for属性,不要对input元素的父元素或者input本身绑定事件,这样不能有效的避免冒泡事件, 3、如果想扩大选择区,可以选择扩大label的高度和宽度,不要选择扩大父元素的宽高。 4、如果某一个checkbox不能选中,而本身js又没有对他做任何事件托管,那就要查一下,id是否重复了。 5、checkbox的样式尽量不要自己修改,存在很多兼容性问题,尽量使用插件来改变样式,比如icheck
windseek
2018/06/14
9980
vue checkbox list 增删改
<template>   <div class=”hello”>     <div style=”display:flex;”>       <span @click=”test($event,index);cur=index” v-for=”(item,index) in obj” :key=”item.name” >         <input v-model=”list” type=”checkbox” :label=’item.name’ :value=”item.name” >         
kirin
2021/01/07
5410
checkbox选中和不选中 jqu_jquery怎么设置checkbox不选中?
1、设置不选中:$(“#my-checkbox”).prop(“checked”,false);
全栈程序员站长
2022/09/14
3.7K0
WPF 修改CheckBox样式
它包含一个复选框(ToggleButton)和一个文(Content),改写它,要做的就是修改它们的模板了~
zls365
2021/04/02
2.7K0
checkbox选中和不选中 jqu_jquery checkbox 选中不选中
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
全栈程序员站长
2022/09/07
2.9K0
RadioButton、CheckBox与ToggleButton
1.RadioButton RadioButton被称作为单选框,通常都是以组的形式出现,可以在一组控件中选择一个。 RadioButton的使用首先需要加入<RadioGroup/>,在这个组中,我们进行单选按钮的声明。 1 <RadioGroup 2 android:id="@+id/radioGroup" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_c
水击三千
2018/02/27
1K0
点击加载更多

相似问题

checkbox mvc验证

10

MVC checkBox值

13

MVC Html.Checkbox

218

MVC CheckBox更改事件

12

ASP.NET MVC CheckBox

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文