2013-11-22 3 views
2

Я знаю, что вы можете использовать следующую types расширитьРасширение протокола для Js даты в clojurescript

object, array, function, string, nil 

т.е.

(extend-type nil Functor 
(fmap 
    ([_ _] nil) 
    ([_ _ _] nil))) 

Я надеюсь сделать то же самое для нативного объекта даты. как это делается?

также .. есть ли более простые типы, которые мне не хватает?

ответ

4

Вот как продлить Дата объекта:

(defprotocol Functor 
    (fmap [_])) 

(extend-type js/Date 
    Functor 
    (fmap 
    ([_] (.log js/console 42)))) 

(fmap (js/Date.))  ;; logs 42 

Список строчных типов (от https://github.com/clojure/clojurescript/blob/202cfcf045cf86d3ab295cbf16a347569b652647/src/cljs/clojure/data.cljs):

ноль, строка, число, массив, функции, логические, по умолчанию

От himera (http://himera.herokuapp.com/synonym.html):

;; In addition native JavaScript objects like 
;; Function, Object, Array, Number, String 
;; are never actually directly extended 

;; For example say you'd like to use RegExps 
;; as functions 

(extend-type js/RegExp 
    IFn 
    (-invoke 
    ([this s] 
    (re-matches this s)))) 

(filter #"foo.*" ["foo" "bar" "foobar"]) 
;; => ("foo" "foobar") 
;; This is precisely how callable collections 
;; are implemented. 
Смежные вопросы