SimpleX
Берешь TVar или MVar
SimpleX
И пишешь клиента для редиса
SimpleX
Хранилище конфига: TVar MyConfig
SimpleX
Все что тебе нужно делать - получить сообщение и выполнить простую функцию "прочитал и распарсил файл, записал в TVar"
SimpleX
Все зависит от того, какой интерфейс у клиента редиса в либе. Я не в курсе.
Anatolii
Просто хаскель это не go в котором можно не разбираясь сейчас вечер напилить что-то
franza
ок, то есть про TVar покурить, так?
Anatolii
Задача и вправду не сложная если знать конкарент либы
SimpleX
ок, то есть про TVar покурить, так?
Про MVar, TVar, чтение файлов и парсинг (если кастомный формат; с JSON и YAML все просто). Ну и доки либы для работы с редисом, конечно
franza
ок, спс
Нурлан
ребят, подскажите как с монадами сделать такое f :: (Monad a) a -> a -> m a нужна функция которая будет рабать так g f a b = g f b (f a b) конечно надо еще что бы и останавливалась на определенном шаге
Нурлан
пытался запихнуть все в пару, что бы f :: (Monad m) => (a,a) -> m (a,a) тогда получилось бы нужную g создать фолдом
Нурлан
но возникли сложности
Нурлан
или может подскажите, как монаду внутри пары вынести вовне
Нурлан
компилятор ругается на строку 63
Нурлан
Нурлан
в zs приходит тип Diagonal
Ilya
f :: ( Monad a) => a -> m a f = return
Ilya
Ничего не понял, монаду внутри пары вовне -- это (m a , m b) -> m (a,b) ты хочешь?
Ilya
foo (ma, mb) = do a <- ma b <- mb return (a,b)
Ilya
Наверно и поэлегантней есть, но суть вроде такая
Ilya
foo :: (Monad m) => (m a, m b) -> m (a,b) Тупл по вкусу
Ilya
А еще ты похоже хочешь функцию a-> a -> a
Ilya
Это аппенд из моноида
Нурлан
нужна вот эта g f a b = g f b (f a b) но с остановкой
Нурлан
получилось! создав такую функцию
Нурлан
Нурлан
спасибо )
Boris
Всем привет! У меня маленький вопрос. Есть список предикатов, надо проверить, что все они верны на каком то значении. Я вот так сделал. Работает. Но есть подозрение, что есть какой то способ проще. Заранее спасибо checkLaws :: Log Int -> Bool checkLaws ml = and (map (flip ($) ml) [checkLaw1, checkLaw2, checkLaw3])
Vladislav
checkLaws ml = all ($ ml) [checkLaw1, checkLaw2, checkLaw3]
Boris
Logger1.hs:42:1: error: • Couldn't match expected type ‘Bool’ with actual type ‘Log Int -> Bool’ • The equation(s) for ‘checkLawsTest1’ have one argument, but its type ‘Bool’ has none
Boris
Неа ;-)
Boris
Не проходит)
Vladislav
а у checkLaw1 какой тип?
Boris
checkLaw1 :: Log Int -> Bool
Vladislav
тогда странно
Vladislav
Prelude> checkLaws ml list = all ($ ml) list Prelude> :t checkLaws checkLaws :: Foldable t => a -> t (a -> Bool) -> Bool
Алдар
а лог это шо такое
Boris
Так, разобрался
Boris
Спасибо!!
Boris
Дейстивтельно работает, не тот кусок закомментил
Boris
Да я на степике курс по хаскелю заканчивал
Boris
Это из него задания
Алдар
) я его тоже проходил
Алдар
Когда там продолжение, вроде обещали
Boris
весна 2017 насколько я понял
Boris
Если у них там все ок будет
Boris
Я когда он шел не успел, и сейчас прохожу
Алдар
я не успел с отличием получить
Алдар
вот надеюсь покруче курс будет с трансформерами
Boris
монады после 10 лет явы с трудом в голову входят ;-(
Нурлан
сейчас тоже с монадами воюю, но явы за плечами нет
Мерль
[last news] A Haskell web framework
Vladimir
Ох, я открыл йесод, сгенерил скаффолдом поиложение, зашел в сгенеренный код и закрыл йесод)
Vladimir
Но штука, наверно, хорошая, если пряиюм дофига сайт нужно делать и если разобраться
Boris
Слишком кривой или слишком сложный?
Vladimir
Слишком много всего было для моей маленькой задачи. Мне там одного WAI с варпом, по идее, должно хватить
Alexander
yesod это ашина для уничтожения человечества
Alexander
что угодно проще чем есод
Alexander
Konstantin
@qnikst а что с подкастом стало?
Alexander
всем лень рома ушёл в machine learning, а никто особо не хочет брать на себя обязательства про запись сведение и т.п.
Alexander
это если совсем честно
Konstantin
ясно
Anatolii
Жалко
Anatolii
вас было круто слушать
Boris
А стоящий подкаст? есть смысл с начала прослушать?
Vladimir
Я просто сгенерил yesod-sqlite проект, открыл Application.hs, а там в комменте:
Vladimir
-- We need a log function to create a connection pool. We need a connection -- pool to create our foundation. And we need our foundation to get a -- logging function. To get out of this loop, we initially create a -- temporary foundation without a real connection pool, get a log function -- from there, and then create the real foundation. let mkFoundation appConnPool = App {..} -- The App {..} syntax is an example of record wild cards. For more -- information, see: -- https://ocharles.org.uk/blog/posts/2014-12-04-record-wildcards.html tempFoundation = mkFoundation $ error "connPool forced in tempFoundation" logFunc = messageLoggerSource tempFoundation appLogger
Vladimir
После этого я решил, что, пожалуй, пока нет)
Alexander
да я тоже бы был непрочь поболтать, но резать это все это не охота
Anonymous
@qnikst а есть чат про TT/agda/idris/coq/etc?
Alexander
я не видел, но если найдете - расскажите мне
Anonymous
я не видел, но если найдете - расскажите мне
Ну если тут не знают, то наверное его и нет. Просто не так много людей, кто этим занимается, а тот факт чтобы были они в телеграме совсем мал. Думал что от gitter/ruHaskell чего-нибудь отпочковалось в этом направлении.
Alexander
нет. скорее в haskell-learning slack
Alexander
или прочих слаках
Anonymous
А рекламировать можно? http://typetheory.ru Если кто-нибудь знает какие-нибудь другие материалы на русском, то буду рад добавить.
Нурлан
а содержание этих лекций есть в виде текста?