Vladislav
Это значит, что инстанс будет работать для любого e
Vladislav
Можешь даже явно так и написать, "для любого" (т.е. "forall"):
instance forall e. Functor (Either e) where
Vladislav
Для этого надо только -XExplicitForAll включить.
sherzod
То есть должен получиться функтор над конструктором типа
Кабачок
Функтор и так требует * -> *
sherzod
Понял, значит не имеется в виду конкретный тип) Счас буду догонять
Кабачок
То есть он всегда "над конструктором типа"
sherzod
а всё. уяснил. то есть мы просто игнорируем первый параметр
A64m
> I'd imagine we want the nursery to fit in L1 or L2 caches (where applicable) and the Gen1 heap to fit in the rest of the Cache left in Level3 after we account for nurseries?
A64m
традиционный конкурс "угадай эксперта"
A64m
впрочем, эксперт всякий раз один и тот же
Dmitrii
а всё. уяснил. то есть мы просто игнорируем первый параметр
Я бы лучше посоветовал использовать расширение InstanceSigs. И написать инстанс так:
instance Functor (Either e) where
fmap :: (a -> b) -> Either e a -> Either e b
fmap = ...
Если сравнивать с определением класса Functor, то сразу появлятся смысл в таком инстансе:
class Functor f where
fmap :: (a -> b) -> f a -> f b
Можно считать, что если вместо f подставить Either e, то сойдётся.
sherzod
Спасибо, интересно, то есть можно продублировать сигнатуру в инстансе, действительно более явно получается
sherzod
мне кажется это не так. при частичном применении мы фиксируем первый параметр функции. а тут мы его как раз игнорируем, он может быть произвольный
sherzod
мы же не фиксируем тип левой части
sherzod
это похоже на частичное применение, только второго аргумента, а не первого - но только похоже.
Дмитрий
А какие есть пакеты упрощающие работу с TH?
sherzod
sherzod
но только применили не к конкретному типу а к переменной типа
Arthur
хотя я понял что имеется в виду. синтаксически мы использовали частичное применение конструктора типов
Конструктор типа - это то, что находится слева от знака равно. А то, что справа - это конструктор данных. Он может иметь такое же название, как и конструктор типа, или же другое название - но в любом случае конструкторы типа и данных обитают в разных пространствах имен.
При этом конструктор данных одновременно является и функцией, которую мы применяем к аргументам, чтобы получить значение нашего типа.
sherzod
Это я знаю, но в описании инстанса у нас конструктор типа.
Aleksei (astynax)
В описании инстанса тип. Это может быть и частично/полностью применённый (сконструированный) тип - всё зависит от кайнда
sherzod
Разве конструктор типа не является типом? (HOT)
Aleksei (astynax)
(покапитанствовал :))
Aleksei (astynax)
Является, конечно
sherzod
ок)
Дмитрий
Что совсем ничего? Я не верю, что не существует библитечки позволяющей перебирать AST более комфортно :(
Aleksei (astynax)
Куда уж там упрощать?
Aleksei (astynax)
И так сравнительно нормально
Дмитрий
Это не сложно, но муторошно :( складывается впечатление, что приходится писать много лишнего. Да и результат выглядит не очень красивою
Aleksei (astynax)
Это чтобы не злоупотребляли :)
Дмитрий
Не как не могу добиться, чтобы оно меня эстетически удовлетворило.
Дмитрий
Это чтобы не злоупотребляли :)
Блин, но возможность композицией получать новые типы данных, это то, чего мне в принципе в нешаблонном хаскеле не хватает...
Aleksei (astynax)
TH-код не должен выглядеть эстетично, он должен выглядеть "немного не очень" - чтобы не хотелось его использовать без необходимости :)
Aleksei (astynax)
Aleksei (astynax)
TH, это же про "по-быстрому нашаблонизируем то, что копипастить лениво"
Aleksei
Есть еще такая идея
Дмитрий
Generic?
Смотрел, не то. Суть в том, что у меня есть разные акторы и им всем идут разные сигналы. Часть из этих сигналов образуют пересекающиеся множества.
Aleksei
Что быстрее?
Aleksei
Копипастить?
Aleksei
Или придумывать?
Aleksei
Придумыввать дженерики - интереснее
Aleksei
А копипастить - быстрее
Aleksei
без дженериков
Aleksei (astynax)
Копипаста плохо сопровождается, да
Aleksei
Соглашусь
Aleksei
Но
Aleksei
Есть вопрос
Aleksei
Нужно ли это?
Aleksei
Сопровождаемость?
Дмитрий
И вообще как сделать разные типы с пересекающимися множествами без TH не знаю.
Aleksei
Поддержка?
Aleksei (astynax)
Что "нужно ли это"?
Aleksei (astynax)
Вам хочется писать каждый инстанс ToJSON руками?
Aleksei
В болших проектах - да
Aleksei
Ну нет же
Aleksei
есть, я не знаю fasterxml
Aleksei
или что там
Aleksei (astynax)
Тот код, который не написал программист средней руки, а нагенерила либа - более лучший
Aleksei
Это принципиальный вопрос?
Aleksei (astynax)
Если что-то можно доверить компилятору (скинуть на него), то это нужно сделать.
Дмитрий
Делать с ними сериализацию данных одно удовольствие, дериав.
Aleksei (astynax)
Это принципиальный вопрос
Aleksei
Я очень люблю скала
Дмитрий
Aleksei
На втором месте наверное хаскел
Aleksei
Но блин
Aleksei (astynax)
В Scala другие привычки и нормы
Aleksei
Восновном пишу на джава
Aleksei
Но вот вопрос то в чем
Aleksei (astynax)
В Haskell всё, что можно отдаль компилятору, отдают ему. Птому что компилятор умнее, не страдает замыливанием глаз, не забывает, не очепятывается
Aleksei
Надо ли прилагать кучу интеллекстуальных усилий, чтобы найти дженерик решение?
Aleksei (astynax)
Haskell - для lazy программистов
Aleksei
я не чтобы посраться
Aleksei
просто для себя понять
Aleksei
да я не думаю на хаскел наверное
Aleksei
просто