我有一条记录,比如$('#checkusername').keyup(function() {
var username = $('#checkusername').val();
$.ajax({
url: 'usernamecheck-validate.php',
type: 'POST',
data: {
checkusername: username
},
success: function(data){
$('.status').html(data);
}
});
});
,以及一个以某种方式转换该记录的mutator函数(例如,通过改变一个成员):
structure
( a_mutator :: structure -> structure
可能是我程序的默认配置.mutator可以是根据命令行选项更改默认配置的函数。
(我们也可以写一个别名:
structure
)
现在,我不想让mutator改变结构的某些成员。例如,可能不允许用户更改配置中的工作模式。
我将强制执行的方法是首先保存这些成员,应用mutator,然后放回保留的成员:
type Mutator structure = structure -> structure
其中preserving :: Lens' structure member -> (structure -> structure) -> (structure -> structure )
preserving le mutator = \ target ->
let
previous_value = target ^. le
mutated = mutator target
in set le previous_value mutated
和(^.)
来自lens库。
现在,因为set
的类型可以重写为
preserving
组成preserving :: Lens' structure member -> Mutator structure -> Mutator structure
函数的部分应用程序是合理的:
preserving
意图保留lens1指向的成员和lens2指向的成员。问题是,这有效吗?也就是说,preserving lens1 . preserving lens2
应用程序"撰写"这条路?如果是这样,我怎样才能建立某种证明呢?如果他们没有撰写,我该如何解决?
答案 0 :(得分:1)
在我看来,这不是使用镜头库达到目的的最佳方式。如果在不更新mutateMemberWith :: (forall structure .
Structure -- Input
-> structure -- Copy of input
-> Lens' structure Member
-> structure)
-> Structure
-> Structure
mutateMemberWith f s = f s s appropriateLens
调用的情况下向结构添加新的“敏感”字段,则可能效率低下并且可能打开“安全漏洞”。而不是枚举mutator必须保留的东西,你应该枚举它可能更改的东西。所以
create unique index unq_rx_r_hash on rx(r_hash);
传入的函数不允许关心它产生的类型,所以它只能通过使用给定镜头修改输入来产生它。