Anonymous
не знаю, ничего про персистент. Но имя сгенеренного типа-то у вас есть?
Вот тут уже начинается область, где я буду плавать в терминологии. Из этого описания генерируется GADT, а я толком не понимаю что это такое. λ> :t UserAvatar UserAvatar :: EntityField User (Maybe Text) λ> :i UserAvatar data instance EntityField User typ where ... UserAvatar :: typ ~ Maybe Text => EntityField User typ ... Мне нужно поведение show UserAvatar == "UserAvatar" UserAvatar является конструктором для типа EntityField User (Maybe Text) . Сгенеренный тип тут - User. Он мне не нужен для того чтобы сделать нужный мне show. TH генерирует конструктор на каждое поле, причем каждое поле будет иметь свой EntityField a b. Если как то возможно задерайвить Show для EntityField a b где a и b заранее неизвестны то это хорошо.
Anonymous
Почему a->a не правильно?
Если сделать класс с ф not', а под него свой случай / instance для B, то и a -> a сойдёт. Это если в планах плодить и другие Б
Dmitry
а чем OVERLAPPING тут мешает? Если комиляцию проходит, то и норм, наверное? Что будет в том коде, который приведен, неизвестно. Зависит от того из какой монады m вызывается. Надо полный пример, мне кажется.
кана
с Overlapping (как в дефолте) при наличи в стеке IO currentTime будет зависить от IO без Overlapping при наличии в стеке IO currentTime будет брать из ReaderT
кана
независимо от того, какой тип
Dmitry
а тип индексирован типом записи таблицы и типом поля
Dmitry
наворочено... Мне кажется, что сейчас можно делать по-другому. Но это все 8 лет назад делалось
Dmitry
sorry, продолжу
Dmitry
ghci> x <- getCurrentTime ghci> let f1=currentTime >>= liftIO . print >> currentTime >>= liftIO . print :: ReaderT UTCTime IO () ghci> let f2=currentTime >>= liftIO . print >> currentTime >>= liftIO . print :: IO () ghci> runReaderT f1 x 2018-05-01 17:53:54.648298031 UTC 2018-05-01 17:53:54.648298031 UTC ghci> f2 2018-05-01 17:55:28.411178197 UTC 2018-05-01 17:55:28.412000884 UTC
Dmitry
на мой взгляд все работает со всеми overlapping'ами
кана
Aleksey
liftIO $ do .........
Alexander
?
кана
liftIO $ do .........
не вариант
кана
currentTime без liftIO же нужен
Алексей ayaye :)
привет. на нубские вопросы отвечаете? )
Антон
Andrei
да, но в https://t.me/haskell_learn ещё и подробно :)
кана
кекб
Алексей ayaye :)
пасиб
Alexander
ЗДЕСЬ
Alexander
вопросы
Aleksey
currentTime без liftIO же нужен
https://hackage.haskell.org/package/lifted-base-0.2.3.12/docs/Control-Concurrent-Lifted.html тогда это
Alexander
не, там же о другом разговор
Alexander
есть MonadTime для моканья функции
Alexander
и вопрос был когда она будет работать в IO а когда использовать ReaderT UTCTime
Alexander
т.е. lifted / unlift и прочие не решают этот вопрос
Alexander
и вопросов с Overloading и порядком там тоже не возникает
кана
даже не так, скорее про то, как заюзать ридерный инстанс, если в стеке есть IO
кана
почему-то одинаковый код у меня и выше работает по разному
Alexander
ну там ответ простой только newtype
кана
не только newtype
кана
еще работает орфан инстанс без overlapping
Aleksey
я бы сделал newtype у которого свой особый инстанс
Alexander
нормальный вариант - только 1
Aleksey
а у остальных через MonadBase IO m
Alexander
orphan instance это прям призыв к тому чтобы ghc ногу отстрелил
Alexander
в случае overlapping instances
кана
ну собственно решение с ньютайпом давно есть
кана
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Concurrent import Control.Monad.IO.Class import Control.Monad.Reader import Control.Monad.Time import Data.Time newtype MyReaderT e m a = MyReaderT { unMyReaderT :: ReaderT e m a } deriving ( Functor , Applicative , Monad , MonadReader e , MonadIO ) instance Monad m => MonadTime (MyReaderT UTCTime m) where currentTime = ask runMyReaderT :: MyReaderT e m a -> e -> m a runMyReaderT m = runReaderT (unMyReaderT m) program :: (MonadTime m, MonadIO m) => m () program = do liftIO . putStrLn . show =<< currentTime liftIO $ threadDelay 200000 liftIO . putStrLn . show =<< currentTime liftIO $ threadDelay 200000 liftIO . putStrLn . show =<< currentTime main :: IO () main = runMyReaderT program =<< currentTime
кана
но у него свои проблемы имхо
Alexander
почему по разному работает - у вас библиотеки одной версии?
Aleksey
можно еще сделать data CurrentTime = CurrentTime (IO UTCTime) и MonadReader CurrentTime m
Alexander
вот любители над mtl поиздеваться
Aleksey
в тестах подсовывать один CurrentTime а в проде другой
Alexander
newtype AppBase = AppBase { ....} <- весь нужный стек
Alexander
instance MonadTime AppBase ...
Aleksey
это уже йесод
Alexander
переименуй имя и будет не йесод
Aleksey
подход тот же, подход йесода работает хреново
Aleksey
полиморфный код не попишешь
Alexander
mtl это для одна конкретная монадка, и для неё инстансы напилить, а не магический lift и толпа стеков
Alexander
с AppBase? попишешь конечно
Alexander
т.к. у тебя функции над mtl классами
Aleksey
ну или так, но констрейнты накладывать не на монаду, а на appBase
Aleksey
ну т.е. если тебе нужен код, который не знает про устройство конкретного AppBase
Alexander
ты тупишь
Alexander
смотри у нас есть библиотека, использующая mtl-классы
Alexander
которая ничего не знает про AppBase
Alexander
когда ты делаешь AppBase ты делаешь конкретную вещь, и реализуешь инстансы для этих mtl -классов
Alexander
и все работает
Alexander
а не эти MyReaderT
Aleksey
когда ты делаешь AppBase ты делаешь конкретную вещь, и реализуешь инстансы для этих mtl -классов
не понял, каких mtl классов инстансы для чего надо реализовать?
Alexander
забей
Alexander
просто думай об этом, пусть это будет твоим кошмаром
Aleksey
обязательно
Антон
Хаскельное сообщество меня продолжает умилять своей вежливостью и отзывчивостью
Alex
Хаскельное сообщество меня продолжает умилять своей вежливостью и отзывчивостью
Не заходите в рускоязычные чаты по iOs или Spring (java) без РХБЗ
Alexander
Антон я вроде segfault-а давно знаю и он меня тоже, можно позволить мне так общаться, если он с чем-то не согласен он скажет
Alex
РХБЗ?
Ну, без Л-1. Костюм радиохимбиозащиты
Alexander
РХБЗ?
а вот отношении тех, кто рекламирует haskell-learn и не объясняет подробно в этом канале у меня вообще zero-tolerance
Alexander
только очень плохие люди так делают
Alexander
Хаскельное сообщество меня продолжает умилять своей вежливостью и отзывчивостью
а самое прикольное такие forward-s из этого же канала видеть от людей кому, вроде бы вполне нормально объясняли : (
Alexander
может и в правду ну это все нахрен, пусть будет только haskell-learn и нетоксичные правильные люди, а тут только будет про политоту, и репосты про то, какое общество токсичное и плохое
Alexander
\o/