Leonid 🦇
ох господи, это HDBC, все в машину времени!
Vasiliy
fromRow (SqlInt64 eid, [d -> Just nm, d -> Just pwd, d -> Just vn]) = Just $ User eid nm pwd vn where d (SqlByteString nm) = either (const Nothing) Just $ decodeUtf8' nm d _ = Nothing fromRow _ = Nothing
мне кажется, без view patterns как-то проще: fromRow [SqlInt64 eid, nm, pwd, nv] = User (toInteger eid) <$> d nm <*> d pwd <*> d vn
Alexander
да, так норм
Unat
А что не так с HDBC?
Leonid 🦇
он старый и стрёмный
Unat
а какие есть альтернативы? Я видел только *-simple, которые сделаны каждый под свою БД
Cheese
а разве нужен кому-то 1 клиент под разные БД?
Unat
ну, когда я смотрел что есть для БД, то увидел небогатый выбор
Unat
и "Вау, да тут можно один клиент под разные БД использовать"
A64m
Кстати, а как узнать о View Patterns, если ни разу до этого их не трогал?
в GHC-ном мануале, там же ссылки будут для углубленного изучения
A64m
http://ghc.readthedocs.io/en/latest/glasgow_exts.html#view-patterns
Cheese
у Касперского или на Касперского, но не в нём
­
Ехехе
­
Я прост сидел в гиттере
­
Помню аватар
Alexander
а тут неясно что туториалить
Unat
да вообще что-нибудь простое
Unat
взять тот-же андроид с котлином или явой. Полон гитхаб ToDo-list'ов с тысяча и одной иллюстрацией каждого чиха
Alexander
с Tutorial конечно была интересная задумка и со school of haskell
Alexander
но как-то никто её не форснул
Unat
А то книжку со слоником я прочёл, а как с этим жить в суровой реальности не понятно
A64m
ну книжка со слоником - она "для общего развития"
Unat
Таки да, это утверждение совпадает с действительностью :)
Kirill
@nepherpitou есть ещё толстая книжка за деньги, там туториалов порядком
Kirill
Но она онлайн же доступна
Kirill
В отличие от
Unat
от...?
Kirill
Haskellbook
A64m
а туториал по чему именно требуется-то в данном случае?
Unat
По основным шагам в написании веб-сервиса, например.
Unat
что-куда-к чему использовать и почему не использовать
Danila Matveev
это уже гайд какой-то
Danila Matveev
просто туториал, например, у серванта есть
Unat
от перемены терминов суть меняется не сильно. Я вот при попытке найти таковой гайд нашел кучу разношерстой шляпы по scotty
A64m
там емнип туториал будет именно по серванту же, а не по всему набору библиотек который понадобится
A64m
т.е. тут нужна, видимо, книга типа RWH но новее, например какая-нибудь такая http://www.apress.com/gp/book/9781430262503
A64m
но такие книги за год устаревают
Unat
ха! Я когда искал что-куда считал за благо советы или статьи из 2012
Unat
в основном было 2008-2010
Unat
а ты "за год устаревают"
Vladislav
Господи, дай мне сил intermediatehaskell.com дописать
Vladislav
Пойду, пожалуй, этим и займусь.
A64m
ха! Я когда искал что-куда считал за благо советы или статьи из 2012
да, в материале по хаскелю надо в первую очередь год смотреть
Unat
А что кстати не так со scotty?
со scotty, в целом, всё в полном порядке, насколько я могу судить. Беда с описанием того, как с его помощью пилить полноценный сервис. Нет, силой мысли можно рано или поздно дойти до удовлетворяющего состояния проекта, но у "конкурентов", той-же скалы, к примеру, разных гайдов с подробным разжевыванием до неприличия больше
Darwin
Есть по скотти хорошие статьи, и не одна
Darwin
http://seanhess.github.io/2015/08/19/practical-haskell-json-api.html например
PsyDebug
ну я просто взялся его потрогать и пока да, для всего есть гайд, но я не пробовал другие, потому и уточнил.
Darwin
я слышал тут мнение, что servant уже стандарт де-факто, но мне с моим weekend haskell например scotty намного понятнее
Unat
Есть по скотти хорошие статьи, и не одна
ага, я и говорю, со скотти всё хорошо. Как заставить его выплюнуть json или текст вполне понятно. А вот как сделать так, чтобы при полсотни роутов поддержка не превратилась в ад - не понятно.
Dmitry
> Haskell users are satisfied with library performance > Haskell users are extremely unsatisfied with their ability to reason about the performance of their programs
Dmitry
интересное сочетание
A64m
это просто неверная интерпретация графиков
Aleksei (astynax)
я слышал тут мнение, что servant уже стандарт де-факто, но мне с моим weekend haskell например scotty намного понятнее
стандарт де факто, это WAI (и то некоторые не согласны), а всё что поверх - пока вкусовщина :)
Vasiliy
а на что можно заменить вот такое? mapM_ (\x -> f1 x >> f2 x) xs где f1 :: String -> IO () и f2 :: String -> IO () просто применить последовательно f1 и f2 к x
Alexander
гершом такой гершом...
Alexander
Prelude Control.Monad Control.Applicative> :t mapM_ (liftA2 (>>) f1 f2) mapM_ (liftA2 (>>) f1 f2) :: Foldable t => t String -> IO ()
Alexander
@vasyayorkin так например ^
Alexander
mapM_ ((>>) <$> f1 <*> f2)
Vasiliy
отлично, спасибо!
Кабачок
mapM_ $ uncurry (>>) . (f1 &&& f2) &&& из Control.Arrow
Alexander
у меня проще :P
Кабачок
А мне так больше нравиться)
Кабачок
А есть в стандартной библиотеке что-нибудь типа dup x = (x, x)?
Alexander
вроде нету
A64m
зачем если можно join (,)
Кабачок
Я так и знал что какой-то такой прикол есть!
Kirill
яб императивненько forM_ фигакнул
Kirill
питонистей
Alexander
ну тут mapM норм заходит, поинтфришненько
Зигохистоморфный
зачем если можно join (,)
Это не просто так) в комбинаторах это есть комбинатор-дубликатор с названием W
Зигохистоморфный
W fn
Зигохистоморфный
ну тут mapM норм заходит, поинтфришненько
Лучше traverse тогда) рестрикшн на монадку пропадет)
Alexander
+
Vasiliy
ну да, я обратил внимание в доке As of base 4.8.0.0, mapM_ is just traverse_, specialized to Monad.
Зигохистоморфный
У диля есть классное наставление
Alexander
ачтогдекак?