Sha256: c4eb251c503205cd9142e662696f61ef82a90863954591ca57e2caa709c2e6cd
Contents?: true
Size: 1.7 KB
Versions: 2
Compression:
Stored size: 1.7 KB
Contents
(defmacro defprotocol [name & doc+methods] (let [head (first doc-methods) doc (if (string? head) head) methods (if doc (rest doc+methods) doc+methods) signatures (defmacro deftype [id fields & opts+specs] (let [body (loop [body [] fields fields] (if (empty? fields) (conj body 'this) (recur (conj body (list 'set! (symbol (str "this." (name (first fields)))) (first fields))) (rest fields)))) methods (loop [protocol nil forms opts+specs defs []] (let [form (first forms)] (cond (empty? forms) defs (symbol? form) (recur form (rest forms) defs) (list? form) (if (nil? protocol) (throw (SyntaxError "Protocol missing")) (recur protocol (rest forms) (conj defs (list protocol id (cons 'fn form))))) :else (recur protocol (rest forms) defs)))) ] `(def ~id (do (def ~id (fn ~id ~fields ~@body)) ~@methods ~id)))) (defprotocol Colored (color [this])) (deftype Apple [color] Colored (color [_] _)) (color (Apple. :red))
Version data entries
2 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ruby-wisp-source-0.7.0 | vendor/node_modules/wisp/src/type.wisp |
ruby-wisp-source-0.7.0 | vendor/try/node_modules/~wisp/src/type.wisp |