Введите значения и "Доступный псевдотип" в Sanctuary.js (Fantasy Land)

Я работаю с документацией на Sanctuary.js. Я также работал над изучением языка Haskell и немного боролся с концепциями FP.

  1. Я понимаю, что значение типа - это объект, который имеет (а) конструктор (представитель типа), (б) идентификатор типа (имя типа как свойство с именем @@typeи (c) любые методы, которые должны быть реализованы типом. В чем разница между значением типа FP и обычными объектно-ориентированными объектами, кроме значения типа, не имеющего состояния? Спецификация Fantasy-Land дает стандартные типы для реализации, включая методы для них. Некоторые (все?) Из этих методов подчиняются алгебраическим законам, таким как Functors требующий map метод, который подчиняется законам идентичности и состава. Могу ли я создавать свои типы пользователей и требовать от них тех методов, которые мне нравятся? Должны ли эти методы соответствовать каким-либо алгебраическим принципам или законам проектирования? Если нет, то мне кажется, что дизайн ОО (без состояния объекта) мне кажется! Я не знаю, что мне не хватает. Типы похожи на интерфейсы? Родительские объекты?

  2. В документации Sanctuary говорится о "доступном псевдотипе" - типе значений, которые поддерживают доступ к свойству, или каждом значении, кроме null а также undefined, Это говорит о том, что "Object близко, но Object.create(null) создает значение, которое поддерживает доступ к свойству, но не является членом типа "Объект". Но печать объекта, созданного с null шоу {}, И его typeof являющийся object, Это похоже на член типа Object для меня. Что я недопонимаю? Почему Accessible нужен псевдо-тип? И в чем разница между псевдотипом и обычным типом? Integerнапример, называется псевдоклассом, но кажется, что это расширение Number класс для меня.

1 ответ

Решение

В чем разница между значением типа FP и обычными объектно-ориентированными объектами, кроме значения типа, не имеющего состояния?

Дело не только в том, что они не имеют изменяемого состояния, они не несут никаких значений, как это делают экземпляры ООП. Они больше похожи на класс объекта ООП. Это объекты JS, имеющие только статические методы или иначе: запись, содержащая простые функции.

Могу ли я создавать свои типы пользователей и требовать от них тех методов, которые мне нравятся?

Да!

Должны ли эти методы соответствовать каким-либо алгебраическим принципам или законам проектирования?

Нет да. Вы можете написать незаконные методы, и ничто не остановит вас. Даже в Haskell эти законы не применяются компилятором / проверкой типов. ( Обычно).

Они могут даже работать. Но они нарушают предположения других разработчиков, и они нарушают предположения, на которые опирается код, написанный этими разработчиками.

Типы похожи на интерфейсы?

Да, это может быть хорошей метафорой. Или, по крайней мере, классы типов, экземпляры которых создаются объектами типов (необходимость в JavaScript), являются интерфейсами, которые реализуются типом.

Печать объекта, созданного с нулевыми шоу {}, И его typeof быть объектом. Это похоже на член типа Object для меня. Что я недопонимаю?

"Член", вероятно, относится к instanceof здесь - и Object.create(null) instanceof Object является falseпотому что он не наследуется от Object.prototype, Другие доступные, но неObject объекты могут быть значениями из других областей, например, среды iframe.

Другие вопросы по тегам