Size: a a a

2021 June 24

YS

Yan Shkurinskiy in Haskell
генерилки фильтров/пагинаций для запросов к бд
источник

IK

Ivan Kretov in Haskell
Товарищи, день добрый. Практическая проблема с Hasql. Пишу декодеры для типов, но как не кручу - выдается ошибка из бд. Вот обе структуры:

reqextractor :: (Int16, Text, Text) -> Requirement
reqextractor (a,b,c) = Requirement a b c

requirement :: Value Requirement
requirement = fmap reqextractor (composite ((,,) <$> (field . nonNullable) int2 <*> (field . nonNullable) text <*> (field . nonNullable) text))

restextractor :: (Text, [Requirement]) -> Restrictor
restextractor (a,b) = Restrictor a b

restrictor :: Value Restrictor
restrictor = fmap restextractor (composite ((,) <$> (field . nonNullable) text <*> (field . nonNullable) (array (dimension replicateM (element (nonNullable requirement))))))

clusterextractor :: (Int16, Text, [Restrictor]) -> Cluster
clusterextractor (a,b,c) = Cluster a b c

cluster :: Value Cluster
cluster = fmap clusterextractor (composite ((,,) <$> (field . nonNullable) int2 <*> (field . nonNullable) text <*> (field . nonNullable) (array (dimension replicateM (element (nonNullable restrictor))))))

clusterDecoder :: Result Cluster
clusterDecoder = singleRow $ column (nonNullable cluster)


и бд:

 cluster_id | cluster_name |                          restrictors
------------+--------------+---------------------------------------------------------------
         1 | for math     | {"(\"Advanced Level GCE\",\"{\"\"(8,Mathematics,A*)\"\"}\")"}
источник

YS

Yan Shkurinskiy in Haskell
Так рестрикторс там же жсон?
источник

YS

Yan Shkurinskiy in Haskell
А, или нет
источник

YS

Yan Shkurinskiy in Haskell
С телефона непонятно сразу -.-
источник

IK

Ivan Kretov in Haskell
Там один композитный тип внутри другого
источник

YS

Yan Shkurinskiy in Haskell
Надо с компа глянуть
источник

IK

Ivan Kretov in Haskell
Спасибо! Есть просто подозрение, что так насаживать типы нельзя (а может я чего не вижу)
источник

YS

Yan Shkurinskiy in Haskell
ну тут для меня как минимум одна проблема
источник

YS

Yan Shkurinskiy in Haskell
Декодеры написаны сложно)
источник

YS

Yan Shkurinskiy in Haskell
я прям уже отвык такое читать
источник

YS

Yan Shkurinskiy in Haskell
Но это вкусовщина, конечно
источник

YS

Yan Shkurinskiy in Haskell
Ну, как минимум, не очень много смысла писать декодер на кортеж, и потом фпамать на "конструктор из кортежа в тип"
источник

YS

Yan Shkurinskiy in Haskell
Можно писать декодер сразу на тип
источник

IK

Ivan Kretov in Haskell
а пример есть какой нибудь?
источник

YS

Yan Shkurinskiy in Haskell
в hasql есть Row
источник

YS

Yan Shkurinskiy in Haskell
у него есть инстанс монады
источник

YS

Yan Shkurinskiy in Haskell
и можно делать так
источник

MK

Maxim Koltsov in Haskell
А можно и не делать
источник

YS

Yan Shkurinskiy in Haskell
data Foo = Foo {bar :: Int, baz :: Double}

fooRow :: Row Foo
fooRow = do
 bar <- column $ nonNullable $ ...
 baz <- column $ nonNullable $ ...
 pure Foo{..}
источник