Fork me on GitHub
#clojure-russia
<
2015-10-16
>
rm08:10:13

помогите мне с макросом, пожалуйста

(defn failed-arg [args]
  (first (filter failed? args)))

(defmacro maybe [f & args]
  (if-let [x (failed-arg args)]
    ~x
    (if (seq? f)
      `(~@f ~@args)
      `(~f ~@args))))

(defmacro maybe->> [val & fns]
  (let [fns (for [f fns] `(maybe ~f))]
    `(->> ~val ~@fns)))
maybe->> раскрывается в какую-то фигню:
idcert.errors=> (macroexpand '(maybe->> 3 (+ 2) (/ 5)))
(/ 5 (idcert.errors/maybe (+ 2) 3))
что я делаю не так?

rm09:10:02

в maybe я, собственно, тоже налажал

prepor09:10:02

ну для начала в нем не так, что такое уже есть в core

prepor09:10:11

ну и когда делаешь макросы для начала нужно понять во что ты хочешь что бы оно раскрывалось. (maybe->> 3 (+ 2) (/ 5)) что с этим должно произойти?

rm09:10:13

ну (maybe / 5 (maybe + 2 3))

niquola09:10:16

~x в незаквоченом выражении выглядит странно

niquola09:10:53

вообще агресивный макрос ты придумал и maybe вроде может быть выражен функцией

rm09:10:04

мне уже тоже так кажется

prepor09:10:25

что в failed? то проверяется? )

niquola09:10:23

чего ты вообще хотел добиться?

rm09:10:01

я хотел https://brehaut.net/blog/2011/error_monads вот это вот, только чтобы можно было цепочки делать

niquola09:10:34

Возьми готовую либу

prepor09:10:37

если ты действительно хочешь монадки, то есть cats

prepor09:10:57

если ты хочешь цепочки по nil-значениям, то some-> есть

prepor09:10:28

(if-let [x (failed-arg args)] ты тут вот понимаешь что проверяешь в failed-arg не значение, а некую форму синтаксическую?

prepor09:10:55

а хочешь ты видимо вообще эксепшены словить

rm09:10:54

ноуп, вернее, не только. Глянь бложик.

rm09:10:22

я там проверяю список, все хорошо же

prepor09:10:07

что в этом списке у тебя будет то?

rm09:10:36

смотри. Передаем в failed-args аргументы функции. Они уже вычислены, так что там всякие строки-числа-хеши или Failure. Оттуда возвращается или nil, или первый найденный Failure

rm09:10:13

@nicola: а какую готовую? Он там не вынес в либу вот эти свои штуки, плюс там не очень удобно с только этим attempt-all жить

dottedmag11:10:17

Господа, а что вы скажете про идею тащить clojurescript и React в content script в хромовом расширении?

dottedmag11:10:52

С одной стороны, не хочется уже руками DOM'ом манипулировать, с другой стороны -- полмегабайта кода в каждую страницу, даже после минификации.

dottedmag11:10:31

Расширение не для определённых страниц, а "ковровое", а-ля AdBlock, но немного для других целей.

jbmeerkat12:10:15

как активный пользователь разных расширений браузера скажу так - не надо, пожалуйста

bernik14:10:53

всем привет. мне тут пришла рассылка, вдруг кому будет интересно. > Коллеги, > > Есть возможность поработать контрактором с Когниансом (http://cogniance.com/). Нужен Clojure and/or Erlang разработчик. Если есть вопросы, пишите на адрес: <mailto:[email protected]|[email protected]> или в скайп: > andrew.panfilov.work > С уважением, > Андрей Панфилов

Kira Sotnikov15:10:00

Я знаю уже 4 компании которые начинаются с cogni

ponimas15:10:09

какие ещё 2?

Kira Sotnikov15:10:51

cognitech cognician

Kira Sotnikov15:10:22

Cognizant Technology Solutions

Kira Sotnikov15:10:06

Надо ботать кложу