Size: a a a

2020 April 17

YS

Yan Shkurinskiy in haskell_blah
Александр Гранин
👍 Это правильно
Только в приложении, которые эти компоненты тягает все и знает о них - куча переконвертов) Недавно написал функцию одну, на дженериках, для того, что автоматически переконвертировать один тип в другой со схожей структурой и "конвертируемыми" полями (по дефолту - коёрсибл)
источник

YS

Yan Shkurinskiy in haskell_blah
Но пока не могу никак её запустить в код и оттестить
источник

YS

Yan Shkurinskiy in haskell_blah
Зато намётки есть
источник

АГ

Александр Гранин... in haskell_blah
Ну, если общие типы для всего упрощают задачу и не выстреливают проблемами в будущем, то можно и не разделять
источник

YS

Yan Shkurinskiy in haskell_blah
Вот не знаю я, буду ли проблемы)
источник

АГ

Александр Гранин... in haskell_blah
С другой стороны, типы API и типы БД ну очень разные обычно
источник

YS

Yan Shkurinskiy in haskell_blah
Приспичит чтобы апи и бд имели разные типы
источник

YS

Yan Shkurinskiy in haskell_blah
И всё, приплыли
источник

АГ

Александр Гранин... in haskell_blah
Yan Shkurinskiy
Вот не знаю я, буду ли проблемы)
Чем больше проект, тем больше вероятность, что будут
источник

YS

Yan Shkurinskiy in haskell_blah
Пока маленький, планирую развиваться
источник

АГ

Александр Гранин... in haskell_blah
Когда дойдешь до линз, там есть generic-lens, в котором есть магические функции upcast, super и smash, которые могут похожие структуры друг в друга переливать одной командой. Но это уже довольно сложная штука
источник

YS

Yan Shkurinskiy in haskell_blah
Александр Гранин
Когда дойдешь до линз, там есть generic-lens, в котором есть магические функции upcast, super и smash, которые могут похожие структуры друг в друга переливать одной командой. Но это уже довольно сложная штука
Ну я похоже подобное провелосипедил)
источник

АГ

Александр Гранин... in haskell_blah
Если так, то ты себя недооцениваешь
источник

YS

Yan Shkurinskiy in haskell_blah
Я просто взял статейку Сэнди про обобщенный валидатор, и сделал обобщенный конвертер)
источник

YS

Yan Shkurinskiy in haskell_blah
Скатал и поменял в паре мест)
источник

ЗП

Зигохистоморфный Пре... in haskell_blah
Yan Shkurinskiy
Я просто взял статейку Сэнди про обобщенный валидатор, и сделал обобщенный конвертер)
а где код?
источник

YS

Yan Shkurinskiy in haskell_blah
так я кидал в основной чат
источник

YS

Yan Shkurinskiy in haskell_blah
ща перекину
источник

YS

Yan Shkurinskiy in haskell_blah
источник

YS

Yan Shkurinskiy in haskell_blah
Переслано от Yan Shkurinskiy
class GConvertible (a :: * -> *) (b :: * -> *) where
 gconvert :: a p -> b p

instance Coercible a b => GConvertible a b where
 gconvert = coerce

instance
 (GConvertible a b, GConvertible a1 b1) =>
 GConvertible (a :*: a1) (b :*: b1)
 where
 gconvert (l :*: r) = (gconvert l) :*: (gconvert r)

instance
 (GConvertible a b, GConvertible a1 b1) =>
 GConvertible (a :+: a1) (b :+: b1)
 where
 gconvert (L1 l) = L1 (gconvert l)
 gconvert (R1 r) = R1 (gconvert r)

instance
 (GConvertible a b) =>
 GConvertible (K1 x (a p)) (K1 x (b p))
 where
 gconvert (K1 a) = K1 (gconvert a)

instance
 (GConvertible a b) =>
 GConvertible (M1 x y a) (M1 x y b)
 where
 gconvert (M1 x) = M1 (gconvert x)

instance GConvertible V1 V1 where
 gconvert = undefined

instance GConvertible U1 U1 where
 gconvert = id

convert ::
 (Generic a, Generic b, GConvertible (Rep a) (Rep b)) =>
 a ->
 b
convert = to . gconvert . from
источник