我正在阅读有关 Sanctuary.js 的文档。我也一直在努力学习 Haskell,并且在 FP 概念上有些挣扎。
我知道类型值是一个对象,它具有 (a) 构造函数(类型代表),(b) 类型标识符(类型的名称作为名为的属性
@@type
,以及 (c) 需要由类型。除了类型值没有任何状态之外,FP 类型值和普通的面向对象对象有什么区别?Fantasy-Land 规范给出了标准类型来实现,包括它们的方法。一些(全部?)这些方法遵循代数定律,例如Functors
要求map
遵循恒等律和组合律的方法。我可以自由地创建我的用户类型并要求他们使用我喜欢的方法吗?这些方法是否必须符合任何代数设计原则或法则?如果不是,那对我来说确实像是 OO 设计(减去对象中的状态)!我不知道我错过了什么。类型像接口吗?父对象?Sanctuary 文档讨论了“可访问的伪类型”——支持属性访问的值的类型,或除and
null
之外的所有值undefined
。它说“Object
很接近,但Object.create(null)
会产生一个支持属性访问但不是 Object 类型成员的值”。但是打印一个用null
显示创建的对象{}
,以及它的typeof
存在object
。对我来说,它似乎是 Object 类型的成员。我有什么误解?为什么Accessible
需要伪类型?伪类型和常规类型有什么区别?Integer
,例如,被称为伪类,但Number
对我来说似乎是类的扩展。