cal*_*-io -1 javascript haskell functional-programming sanctuary
我正在处理Sanctuary.js上的文档.我一直在努力学习Haskell,并且在FP概念上有点挣扎.
我理解类型值是一个对象,它具有(a)构造函数(代表类型),(b)类型标识符(作为命名属性的类型名称@@type,以及(c)需要由除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?Fantasy-Land规范给出了标准类型来实现,包括它们的方法.一些(全部?)的这些方法遵守代数法则,比如Functors要求一种map遵循身份和组成规律的方法.我可以自由地创建我的用户类型并需要我喜欢的方法吗?这些方法是否必须符合任何代数设计原则或法则?不,它确实看起来像OO设计(减去对象中的状态)给我!我不知道我缺少什么.类似接口吗?父对象?
该保护区的文档支持属性访问值的类型,或只是每个值-关于"通达假"的谈判null和undefined.它表示" Object接近,但Object.create(null)产生一个支持属性访问的值,但它不是Object类型的成员".但是,打印具有创建的对象null显示{},它的typeof存在object.它对我来说似乎是Object类型的成员.我有什么误会?为什么Accessiblepsuedo类型是必要的?伪类型和常规类型有什么区别?Integer例如,被称为伪类,但它似乎是Number我的类的扩展.
除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象有什么区别?
它们不仅没有任何可变状态,它们也没有像OOP实例那样携带任何值.它们更像是OOP对象的类.它们是仅具有静态方法的 JS对象,或者换句话说:包含普通函数的记录.
我可以自由创建我的用户类型并需要我喜欢的方法吗?
是!
这些方法是否必须符合任何代数设计原则或法律?
不,是的.你可以写非法的方法,没有什么能阻止你.即使在Haskell中,这些法则也不是由编译器/类型检查器强制执行的.(通常).
他们甚至可能会工作.但是他们打破了其他开发人员的假设,他们打破了那些开发人员编写的代码依赖于工作的假设.
类似接口吗?
是的,这可能是一个很好的比喻.或者至少,由类型对象实例化的类型类(JavaScript中必需的具体化)是由类型实现的接口.
打印使用null显示创建的对象
{}及其typeof作为对象.它对我来说似乎是Object类型的成员.我有什么误会?
"会员"大概指的是instanceof在这里-和Object.create(null) instanceof Object是false的,因为它不继承Object.prototype.其他可访问但非Object对象可能是来自其他领域的值,例如iframe环境.