Size: a a a

2021 February 13

к

кана in Haskell
I O
Некропостинг конечно, но NP I [f a, f b] -> NP f [a, b] с sop можно делать куда проще чем я в прошлый раз написал,  HTrans как раз для такого
блин, действительно
источник

к

кана in Haskell
а кек
источник

к

кана in Haskell
там именно так и написано
источник

JS

Jerzy Syrowiecki in Haskell
1. у меня есть type familiy F a
2. есть код, который работает с F A = A', потому что, например, ToJSON A'
3. ровно тот же самый код работает с F B = B', потому что опять же ToJSON B'

сейчас сижу и думаю, как этот общий код вынести в F a. потому что нет общего ToJSON (F a). или обобщать до ToJSON c => c -> Result? или втащить в ограничение ToJSON (F a) => F a -> Result?

это будет некрасиво, потому что там не один только ToJSON и вообще эти классы будут меняться при смене реализации.

то есть что реально хочется выразить в сигнатуре — (F A ~ c | F B ~ c) => c -> Result
источник

к

кана in Haskell
ну, это можно выразить семейством по списку, которое констрейнт или бул вернет
источник

JS

Jerzy Syrowiecki in Haskell
F X = X' тоже существует, но этот код с ним не работает
источник

JS

Jerzy Syrowiecki in Haskell
кана
ну, это можно выразить семейством по списку, которое констрейнт или бул вернет
а инстансы для A' и B' подставятся?
источник

к

кана in Haskell
блин нет, не думаю
источник

JS

Jerzy Syrowiecki in Haskell
хочется чего-то типа шаблонов С++, чтобы тайпчекинг произошёл после подстановки типа, а не до
источник

JS

Jerzy Syrowiecki in Haskell
там, где я вызываю эту общую функцию, я знаю А и B
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
хочется чего-то типа шаблонов С++, чтобы тайпчекинг произошёл после подстановки типа, а не до
а параметрические модули так умеют?
источник

MK

Maxim Koltsov in Haskell
Да сделай на CPP
источник

JS

Jerzy Syrowiecki in Haskell
грязновато, но должно сработать
источник

к

кана in Haskell
Jerzy Syrowiecki
1. у меня есть type familiy F a
2. есть код, который работает с F A = A', потому что, например, ToJSON A'
3. ровно тот же самый код работает с F B = B', потому что опять же ToJSON B'

сейчас сижу и думаю, как этот общий код вынести в F a. потому что нет общего ToJSON (F a). или обобщать до ToJSON c => c -> Result? или втащить в ограничение ToJSON (F a) => F a -> Result?

это будет некрасиво, потому что там не один только ToJSON и вообще эти классы будут меняться при смене реализации.

то есть что реально хочется выразить в сигнатуре — (F A ~ c | F B ~ c) => c -> Result
да блин, а просто добавить ToJSON c в констрейнты нельзя?
источник

JS

Jerzy Syrowiecki in Haskell
кана
да блин, а просто добавить ToJSON c в констрейнты нельзя?
можно, но

1. много. фактически там надо подставлять ToJSON (Foo a), Show (Bar a), Binary (Baz a)...

2. это протекающие детали реализации
источник

к

кана in Haskell
ну то есть сделать (Elem c [F A, F B] ~ True, ToJSON c) =>
источник

к

кана in Haskell
а ок
источник

ЗП

Зигохистоморфный Пре... in Haskell
кана
ну то есть сделать (Elem c [F A, F B] ~ True, ToJSON c) =>
я так делал
источник

R

Roman in Haskell
кана
ну то есть сделать (Elem c [F A, F B] ~ True, ToJSON c) =>
когда прочитал вопрос, хотел тоже вот это предложить
источник

JS

Jerzy Syrowiecki in Haskell
хочется одним таким Elem заменить дюжину инстансов
источник