如何在 javascript 中使用函子
How to use functors in javascript
本文关键字:javascript 更新时间:2023-09-26
给定一个接受类型a
的函数,我需要应用返回一个接受类型b
的函数的函数z
。基本上:
z -> f(a) -> f(b)
下面是一个更具体的例子。这是一个函数,它接受一个字符串并返回一组使用该字符串的方法:
# f(a)
_typeCheck = (str) ->
isArray: -> str is TYPES.ARRAY
我想将这个函数转换为:
# f(b)
_typeCheck = ->
isArray: (str) -> str is TYPES.ARRAY
执行此操作的功能z
是什么?请帮忙。
注意
我在这里尝试使用函数式编程概念。Haskell有函子,可以修改类型构造函数以接受不同的类型。我相信类似的概念可以帮助我解决问题。在此处阅读更多内容
第一个问题是有一个采用"类型"的函数。JavaScript 是松散类型的,因此任何类型强制都需要来自您。
也就是说,您可以定义一个返回另一个函数的函数,如下所示:
function factory(a) {
// check typeof a
return function(b) {
// do something with a
// check typeof b
};
}
// invoke
var myNewFunction = factory("a string");
myNewFunction("another string");
如果你正在寻找一个返回用于检查类型的函数映射的函数,也许你可以使用这样的模式:
function _typeCheck() {
return {
isArray: function(o) {
return Array.isArray(o);
},
isString: function(o) {
return typeof o === 'string';
},
...etc
};
}
console.log(_typeCheck().isArray(['one','two']));
console.log(_typeCheck().isString('foo'));
我不知道 Haskell,但在 JS 中你可以构造这样的东西:
// define some functors
list = xs => a2b => xs.map(a2b);
tree = t => a2b =>
t ? {
x: a2b(t.x),
le: tree(t.le)(a2b),
ri: tree(t.ri)(a2b)
}
: null;
maybe = x => a2b => x ? a2b(x) : x;
// add five to any functor
add5 = f => f(x => x + 5);
// let's test
myTree = {
x: 1,
le: {
x: 2,
le: {x: 3},
ri: {x: 4}
},
ri: {x: 4}
};
myList = [10, 11, 12, 13];
log = x => document.write('<pre>' + JSON.stringify(x, 0, 3) + "</pre>");
log([
add5(maybe(22)),
add5(maybe(undefined)),
add5(list(myList)),
add5(tree(myTree))
]);
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量