
alexknvl
23.09.2018
08:29:13
ок

Oleg
23.09.2018
08:29:22
т.е дальше ты применяешь условие натуральности и получаешь
(f . fmap g ) id

alexknvl
23.09.2018
08:31:31
ну ок, f. fmap g == fmap g. f для любой g это достаточное условие для from . to = id

Google

Oleg
23.09.2018
08:32:27
В реальности и достаточное.
Лемма Йонеды не просто следует, а эквивалента требованию натуральности

alexknvl
23.09.2018
08:32:34
это практически наверняка следует из законов для fmap и free theorems

Oleg
23.09.2018
08:33:31
Натуральность - это дополнительная структура, она не следует из общности полиморфизма.
Но удачи попробовать

alexknvl
23.09.2018
08:36:02
хм, ∀ x. (a -> x) -> x ~ a точно следует из free theorems, об этом даже написано в Theorems for free вадлера
а вот с произвольным функтором не очевидно

Oleg
23.09.2018
08:36:23

alexknvl
23.09.2018
08:41:16
я сохранил этот разговор, позже подумаю. как додумаюсь, напишу.

Oleg
23.09.2018
08:59:13
Я тоже засомневался в своём последнем утверждении.

Aleksey
23.09.2018
11:43:39
Насколько адекватно брать список неких исходных файлов и на основе них делать динамчески правила для Shake? Хочу плясать от исходников, а не от результата, но это противоречит концепции шейка, няп.
Так то я обошёлся тем, что сделал таргет с файлом-списком-исходников - экшн делает список файлов и процессит все по одному, а в результате пишет в out список того, что напроцессил.
Но такой вариант не позволяет кэшировать результаты сборки
Делать всё через forward я не могу, потому как часть собираемого у меня таки собирается "от результата"

Google

Leonid
23.09.2018
12:05:34
Читай файлы вне шейка
Чтение файла сделай топ Фони и из него делай need
Шейк же монадический а не аппликативный

Timofey
23.09.2018
12:41:22
Ортогональное этой дискуссии замечание - пишите и выкладывайте гайды, тюториалы и сборники how-to по шейку!
А то их в сети раз, два и обчёлся
Я как-то делал динамический need/want, там не сильно много магии. Динамические правила ещё не делал =)

Aleksey
23.09.2018
13:18:21
Сделал диначмеческие правила. Работает.
Чёт шейковы copyFile' со товарищи странно работают с временными папками, которые шейк и создаёт
Трекать как зависимость файлы во временной папке - такое
Ладно хоть можно самлинт прогнать и понять, что лишнее трекаешь
Но в итоге всё норм, результат кэшируется, красота!

Timofey
23.09.2018
16:31:10
Гист в студию!

Aleksey
23.09.2018
17:27:40
https://github.com/astynax/racket-daily-art/blob/master/Build.hs

Timofey
23.09.2018
18:53:05
Спасибо!

Terminator
23.09.2018
19:53:18
@automationanywhere будет жить. Поприветствуем!
Andrey будет жить. Поприветствуем!

Aleksey
24.09.2018
04:32:49

Dmitry
24.09.2018
05:08:32
@astynax
{-# language OverloadedStrings #-}
{-# language ExtendedDefaultRules #-}
https://github.com/nh2/command/issues/1

Aleksey
24.09.2018
05:10:04
Я пробовал. "works, but leaves a warning." как и написали в комментах..

Google

Aleksey
24.09.2018
05:12:26
Но спасибо за ссылку на ишшуй! Из него я узнал о https://github.com/ndmitchell/shake/issues/74 :)
Смогу теперь в IO команды через cmd писать :)

Dmitry
24.09.2018
05:15:03
А почему бы и ворнинг не отключить?

Aleksey
24.09.2018
05:16:27
Ворнинг про warn-type-defaults - полезный. М.б. не в shake-скриптах, конечно :)

Dmitry
24.09.2018
05:34:31
Мы в summoner использовали один прикольный трюк, чтобы писать shell-команды прямо набирая названия команд и передавая аргументы, чтобы как можно ближе к оригиналу получалось. Может быть не самое типо-безопасное решение, но читаемость отличная, и для того, чтобы быстро вызвать какие-то команды из shell очень подходит.
* https://github.com/kowainik/summoner/blob/4395c5f93c4a94d489c0824f733e9127bfdb48a0/src/Summoner/Project.hs#L108-L117

Aleksey
24.09.2018
05:40:23
У cmd шейковского самое приятное - перегрузка вывода.
А ещё передача параметров, если это необходимо. Вот такая cmd (Cwd "/tmp") ...

alexknvl
24.09.2018
06:16:21
А как называется фолд, когда на каждый шаг мы берём в качестве аргумента текущий зиппер всей структуры данных?
т.е. в случае со списками, это будет ([a] -> z) -> (z -> Zipper a -> z) -> [a] -> z

Anatolii
24.09.2018
06:18:38
а то я что-то не опнял как вы этого добились

Aleksey
24.09.2018
06:35:33
IsString уж + OverloadedStrings

Terminator
24.09.2018
06:56:36
Sergei будет жить. Поприветствуем!
@ArtyomKhmelyov будет жить. Поприветствуем!

Dmitry
24.09.2018
07:42:29
а ты можешь рассказать как это работает плиз?
@astynax прав. Все благодаря следующему маленькому инстансу:
https://github.com/kowainik/summoner/blob/4395c5f93c4a94d489c0824f733e9127bfdb48a0/src/Summoner/Process.hs#L21-L26
Как приятный бонус, благодаря этому инстансу, текущая выполняемая команда заодно печатается в консоль в красивеньком виде.

Anatolii
24.09.2018
07:51:41

Mike
24.09.2018
09:42:41
Удалите меня
Аааааааа
Я прошу

Google

Mike
24.09.2018
09:43:26
Админы
!admins

Yuriy
24.09.2018
09:44:41

Admin
ERROR: S client not available

Mike
24.09.2018
09:44:52
Как?
Давай я тебе доступ дам и ты выйдешь

Denis
24.09.2018
09:45:37
свайп по чату

Yuriy
24.09.2018
09:45:43
«изм.»

Denis
24.09.2018
09:45:47
в списке чатов

Mike
24.09.2018
09:46:20

Yuriy
24.09.2018
09:46:55
странный этот ваш айфон
https://apple.stackexchange.com/a/281076

Yura
24.09.2018
10:10:59
чат надо переименовать в VIM

Alexander
24.09.2018
10:13:29
у haskell и vim есть общие вещи
как зайдешь - тяжело выйти назад

Yura
24.09.2018
10:14:05
первая доза бесплатно

Andrew
24.09.2018
10:20:37
Не удаляйте его, пусть просвещается человек!

Yura
24.09.2018
10:21:29
пусть приобщается, с*ка

Alexander
24.09.2018
10:21:49
SKI ?

Google

Alexander
24.09.2018
10:21:51
базис?

Denis
24.09.2018
10:23:14

Alexander
24.09.2018
10:23:35
плохая шутка, забей

Dmitry
24.09.2018
10:35:10
так выпиливать или нет?

Alexander
24.09.2018
10:35:37
да пусть сидит

Dmitry
24.09.2018
10:36:38
я, кстати, не уверен, что бан юзера приводит к его исключению из группы )

Danil
24.09.2018
10:38:53
приводит

A64m
24.09.2018
11:28:49
fast\Data\Reflection.hs:333:33: error: parse error on input `*'
|
333 | (*) a b = AppT (AppT (VarT ''(*)) a) b
| ^
чего ему не нравится-то?

Yuriy
24.09.2018
11:31:35
TypeOperators?
или '(*)?

A64m
24.09.2018
11:33:19
@int_index виноват, наверное
похоже на то
{-# LANGUAGE CPP #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternGuards #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeOperators #-}

Aleksey
24.09.2018
11:38:59
{-# LANGUAGE IntIndexCompatible #-} (прости, Влад!)