
Anatolii
25.10.2016
18:53:51
От эрора хорошего не жди

SimpleX
25.10.2016
18:54:05
Когда нужна причина - либо throwM, либо Left MyError

Yusup
25.10.2016
18:54:09
ну в общем, ты понял

Google

Yusup
25.10.2016
18:54:53
а есть какие-нибудь либы для IO, которые возвращают исключения через Either?

SimpleX
25.10.2016
18:55:43
Так это
try
Из прелюда прямо
Или лучше всего использовать MonadThrow
Пакет exceptions

Yusup
25.10.2016
18:58:13
ок, посмотрю
у меня, кстати, есть вопрос

SimpleX
25.10.2016
18:58:34
Оборачиваешь в EitherT SomeException IO

Anatolii
25.10.2016
18:58:53
Во это да

SimpleX
25.10.2016
18:59:02
И разве что асинхронные исключения пройдут

Yusup
25.10.2016
19:02:30
я не очень хорошо знаю хаскель, знаю монады, совсем немного представляю как трансформеры работают. задача из жизни: мы читаем из файла конфиг и держим в памяти, подписываемся на редис канал и каждый раз когда в канал приходит сообщение мы считываем файл конфигов еще раз и обновляем содержимое памяти. решал я ее на NodeJS и решается она довольно просто. дело в том, что с моими знаниями хаскеля, я не представляю, что тут делать, а задача весьма реальная и касается изменения глобального стейта. как ее можно решить в хаскеле?

SimpleX
25.10.2016
19:10:34
А в чем проблема?

Google

SimpleX
25.10.2016
19:10:47
Берешь либу для работы с редисом
Берешь TVar или MVar
И пишешь клиента для редиса
Хранилище конфига: TVar MyConfig
Все что тебе нужно делать - получить сообщение и выполнить простую функцию "прочитал и распарсил файл, записал в TVar"
Все зависит от того, какой интерфейс у клиента редиса в либе. Я не в курсе.

Anatolii
25.10.2016
19:15:17
Просто хаскель это не go в котором можно не разбираясь сейчас вечер напилить что-то

Yusup
25.10.2016
19:15:40
ок, то есть про TVar покурить, так?

Anatolii
25.10.2016
19:15:42
Задача и вправду не сложная если знать конкарент либы

SimpleX
25.10.2016
19:18:04

Yusup
25.10.2016
19:18:18
ок, спс

Kit
26.10.2016
14:35:04
ребят, подскажите как с монадами сделать такое
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
26.10.2016
16:54:35
f :: ( Monad a) => a -> m a
f = return
Ничего не понял, монаду внутри пары вовне -- это
(m a , m b) -> m (a,b)
ты хочешь?

Kit
26.10.2016
16:59:13

Google

Ilya
26.10.2016
17:06:36
foo (ma, mb) = do
a <- ma
b <- mb
return (a,b)
Наверно и поэлегантней есть, но суть вроде такая
foo :: (Monad m) => (m a, m b) -> m (a,b)
Тупл по вкусу
А еще ты похоже хочешь функцию a-> a -> a
Это аппенд из моноида

Kit
26.10.2016
17:18:01
нужна вот эта g f a b = g f b (f a b) но с остановкой
получилось! создав такую функцию
спасибо )

Boris
26.10.2016
22:27:27
Всем привет! У меня маленький вопрос. Есть список предикатов, надо проверить, что все они верны на каком то значении. Я вот так сделал. Работает. Но есть подозрение, что есть какой то способ проще. Заранее спасибо
checkLaws :: Log Int -> Bool
checkLaws ml = and (map (flip ($) ml) [checkLaw1, checkLaw2, checkLaw3])

Vladislav
26.10.2016
22:30:23
checkLaws ml = all ($ ml) [checkLaw1, checkLaw2, checkLaw3]

Boris
26.10.2016
22:32:45
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
Неа ;-)
Не проходит)

Vladislav
26.10.2016
22:33:20
а у checkLaw1 какой тип?

Boris
26.10.2016
22:33:35
checkLaw1 :: Log Int -> Bool

Vladislav
26.10.2016
22:38:05
тогда странно
Prelude> checkLaws ml list = all ($ ml) list
Prelude> :t checkLaws
checkLaws :: Foldable t => a -> t (a -> Bool) -> Bool

Aldar
26.10.2016
22:38:17
а лог это шо такое

Boris
26.10.2016
22:38:20
Так, разобрался
Спасибо!!

Google

Boris
26.10.2016
22:38:34
Дейстивтельно работает, не тот кусок закомментил
Да я на степике курс по хаскелю заканчивал
Это из него задания

Aldar
26.10.2016
22:39:16
) я его тоже проходил
Когда там продолжение, вроде обещали

Boris
26.10.2016
22:39:49
весна 2017 насколько я понял
Если у них там все ок будет
Я когда он шел не успел, и сейчас прохожу

Aldar
26.10.2016
22:43:19
я не успел с отличием получить
вот надеюсь покруче курс будет с трансформерами

Boris
26.10.2016
22:44:21
монады после 10 лет явы с трудом в голову входят ;-(

Kit
26.10.2016
23:23:48
сейчас тоже с монадами воюю, но явы за плечами нет

Paul
26.10.2016
23:38:47
". Итак, можно сказать, что монады могут произойти или погибнуть
сразу, т. е. они могут получить начало только путем творения и
погибнуть только через уничтожение, тогда как то, что сложно,
начинается или кончается по частям."

Мерлин
27.10.2016
05:44:30
[last news]
A Haskell web framework

Vladimir
27.10.2016
07:02:11
Ох, я открыл йесод, сгенерил скаффолдом поиложение, зашел в сгенеренный код и закрыл йесод)
Но штука, наверно, хорошая, если пряиюм дофига сайт нужно делать и если разобраться

Boris
27.10.2016
09:23:41
Слишком кривой или слишком сложный?

Vladimir
27.10.2016
09:24:49
Слишком много всего было для моей маленькой задачи. Мне там одного WAI с варпом, по идее, должно хватить

Alexander
27.10.2016
13:37:54
yesod это ашина для уничтожения человечества
что угодно проще чем есод

Google

Alexander
27.10.2016
13:38:05
+ъ

Konstantin
27.10.2016
13:41:15
@qnikst а что с подкастом стало?

Alexander
27.10.2016
13:41:48
всем лень рома ушёл в machine learning, а никто особо не хочет брать на себя обязательства про запись сведение и т.п.
это если совсем честно

Konstantin
27.10.2016
13:42:26
ясно

Anatolii
27.10.2016
13:45:02
Жалко
вас было круто слушать

Boris
27.10.2016
13:45:26
А стоящий подкаст? есть смысл с начала прослушать?

Vladimir
27.10.2016
13:47:50
Я просто сгенерил yesod-sqlite проект, открыл Application.hs, а там в комменте:
-- 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
После этого я решил, что, пожалуй, пока нет)

Alexander
27.10.2016
14:15:11
да я тоже бы был непрочь поболтать, но резать это все это не охота

eugene
27.10.2016
14:43:49
@qnikst а есть чат про TT/agda/idris/coq/etc?

Alexander
27.10.2016
14:44:11
я не видел, но если найдете - расскажите мне

eugene
27.10.2016
14:54:43
я не видел, но если найдете - расскажите мне
Ну если тут не знают, то наверное его и нет.
Просто не так много людей, кто этим занимается, а тот факт чтобы были они в телеграме совсем мал. Думал что от gitter/ruHaskell чего-нибудь отпочковалось в этом направлении.

Alexander
27.10.2016
14:57:27
нет. скорее в haskell-learning slack
или прочих слаках

eugene
27.10.2016
15:02:19
А рекламировать можно? http://typetheory.ru
Если кто-нибудь знает какие-нибудь другие материалы на русском, то буду рад добавить.