
Leonid
03.04.2018
08:44:38
catches?
о, точняк. в Control.Monad.Catch оно не список берет а Foldable, вот я и не заметил.

Alexander
03.04.2018
08:50:27

Theta
03.04.2018
08:51:09
ясно короч

Google

Theta
03.04.2018
09:02:58
Главное не ясно зачем он задал этот вопрос в ответ на мои попытки уточнить недопонимания между нами? ?
кто и что имел в виду
так странно

A64m
03.04.2018
09:03:44

Theta
03.04.2018
09:07:37
>
type C f a :: Constraint
type C f a = ()
fmap :: (C f a, C f b) => (a -> b) -> f a -> f b
Что это за магия? O_o
не похоже на...
type Deck = [Card]
например
по каким ключевым словам можно узнать подробнее?

kana
03.04.2018
09:10:26

Theta
03.04.2018
09:10:41
спс.
... читал да забыл

Yuriy
03.04.2018
09:11:57
Глупый вопрос - какую задачу решают type families, а какую gadt?

Alexander
03.04.2018
09:12:23
это одно и тоже

Google

Alexander
03.04.2018
09:12:32
грубо говоря

kana
03.04.2018
09:13:02
Очень грубо имхо, они просто одинаковые механизмы (коершены эквивалентных типов) используют

Alexander
03.04.2018
09:13:14
вообще tf - вычисление на типах

Leonid
03.04.2018
09:15:36
хм. а как на 32 битных ghc делать threadDelay на дольше чем maxBound :: Int микросекунд?

kana
03.04.2018
09:16:07
Делать несколько раз и мириться с возможной погрешностью

Alexander
03.04.2018
09:16:11
сделать несколько?
можно попросить at тебя в сокет пнуть

Leonid
03.04.2018
09:16:43
а есть пакет?

kana
03.04.2018
09:17:00
Есть, видел недавно

Alexander
03.04.2018
09:17:03
был

Leonid
03.04.2018
09:17:10
https://hackage.haskell.org/package/concurrent-extra-0.5/docs/Control-Concurrent-Thread-Delay.html как обычно, Бас приходит на помощь

Alexander
03.04.2018
09:17:10
не помню что-то типа timeouts

Leonid
03.04.2018
09:17:22
хм
из нового выпелен
http://hackage.haskell.org/package/unbounded-delays во

Yuriy
03.04.2018
09:25:10
Ну так а задачи с их помощью какие решают )?

kana
03.04.2018
09:33:45
семейства:
как уже выше сказали, вычисление на уровне типов
классический пример - найти тип элемента по типу контейнера
другой классичиский - сложение натуральных чисел на тайплевеле
как я понимаю, многие задачи семейств раньше (да и сейчас) решали через классы + функциональные зависимости
гадты:
когда нужна зависимость типа от типов аргументов конструктора, в случае с фантомами например. Классический пример:
data E a where
I :: Int -> E Int
B :: Bool -> E Bool
Sum :: E Int -> E Int -> E Int -- this
And :: E Bool -> E Bool -> E Bool -- and this
eval :: E a -> a
eval (I x) = x
eval (B b) = b
eval (Sum x y) = eval x + eval y
eval (And a b) = eval a && eval b
без gadt-ов такое написать сложнее
решаемые задачи: более инвариантные под задачу типы


Leonid
03.04.2018
09:34:28
MVar (IORef a) - вот так же норм для случая когда мне нужно ждать пока значение на поступит, ну а потом оно будет только обновлятся но никогда не исчезнет?
и второй вопрос: что шустрее - readTVarIO или readIORef

Theta
03.04.2018
09:35:24

Google

Yuriy
03.04.2018
09:36:20
Пасиб.

Alexander
03.04.2018
09:38:04

Kirill
03.04.2018
09:52:49

Leonid
03.04.2018
09:53:22
а там у readTVarIO особенный случай
вообще без контеншена я думаю без разницы. IORef тоже спинлок не схватит

Kirill
03.04.2018
09:54:35
https://codeburst.io/the-haskell-concurrency-primitive-shootout-538c21993f1c есть, но не совсем прям свежак :)
так-что TVar даж и быстрей судя по этим бенчам
страннота
правда там бенч на модификацию, так что другой юзкейс :-\

Alexander
03.04.2018
10:04:41
а как бы hasql с логгером подружить?

kana
03.04.2018
10:09:44
Пасиб.
чтобы закончить пример с expr:
data E
= I Int
| B Bool
| Sum E E
| And E E
-- we can (And (I 1) (I 2))
-- not typesafe
eval :: E -> ???
-- we can add phantoms and smart constructors
data E a
-- private (do not export) constructors
= I Int
| B Bool
| Sum (E Int) (E Int)
| And (E Bool) (E Bool)
i :: Int -> E Int
b :: Bool -> E Bool
sum :: E Int -> E Int -> E Int
and :: E Bool -> E Bool -> E Bool
i = I; b = B; sum = Sum; and = And
eval :: E a -> a
eval (I x) = x -- ?? type of `x` is not `a`
-- it is Int
то есть одну проблему мы решили, а вторую (приведение Int к a) нет, гадты решают и это введением коершинов, пруфы о равенстве типов (в данном случае a ~ Int), которые поставляются в конструкторах, и их применении к значению

Yuriy
03.04.2018
10:11:08
Во, ясно.
Данке.

Leonid
03.04.2018
10:13:50
@qnikst в общем благодаря тебе я везде в монадках теперь в использую fix вместо явной рекурсии

Alexander
03.04.2018
10:14:08
\o/

IC
03.04.2018
10:21:51

Alexander
03.04.2018
10:22:21
от неожиданных утечек и введения бесполезных имен

IC
03.04.2018
10:22:45
бесполезные имена это всякие go?

Alexander
03.04.2018
10:22:56
да
вместо `let go = ... in go

Google

Alexander
03.04.2018
10:23:22
+ помогает от утечек при вложенных циклах

IC
03.04.2018
10:23:38
"go не нужен"
— @haskellru

kana
03.04.2018
10:23:56
не очень красиво получается, когда нужно аргумент в fix-функцию передать

Anatolii
03.04.2018
10:23:57

Alister
03.04.2018
10:24:09
хаскель не нужен
-Роб Пайк

Alexander
03.04.2018
10:24:36
ну это ж haskell тут 100500 способов и плюсов и минусов у каждого

IC
03.04.2018
10:24:47
осталось теперь упороться и сделать data ExprF a where и обмазаться тайплевел фиксами

Alexander
03.04.2018
10:24:56
fix это такой safe default

Leonid
03.04.2018
10:24:58
fetchLoop manager req = flip fix 0 $ \next errCount -> do
r <- fetchOnce manager req errCount
case r of
Nothing -> next (succ errCount)
Just keys -> pure keys

Alexander
03.04.2018
10:25:07
ката и анаморфизмами

Theta
03.04.2018
10:25:25

IC
03.04.2018
10:25:40

Alexander
03.04.2018
10:26:26
если кому интересно отмотайте на несколько недель назад, там длинная дискуссия была

Leonid
03.04.2018
10:27:16

Alexander
03.04.2018
10:27:22
в этом
с @JelF1337 диалог был
если я не ошибаюсь

Alexander
03.04.2018
10:27:57
было дело

kana
03.04.2018
10:28:01

Alexander
03.04.2018
10:29:44
вообще как мне передали мысль сноймана если тебе приходится объяснять что-то более, чем 2 раза то пиши об этом пост

Google

Alexander
03.04.2018
10:29:51
видимо надо писать об этом пост.
но это сложно и долго :/

Alexander
03.04.2018
10:31:02
соблюдайте предельную осторожность. Первый симптом fix, потом flip, дальше (.) . (.) и понеслась

Leonid
03.04.2018
10:31:26

Alexander
03.04.2018
10:31:36
я кстати могу

Alexander
03.04.2018
10:31:46
мнение человека может не совпадать со мнением редакции
но вообще круто бы

Anatolii
03.04.2018
10:32:19

Alexander
03.04.2018
10:33:24
ну это ще вроде норм
вот если функция point-free, а большая часть операций там это флипы и композиции, то пациента пора лечить

Sergey
03.04.2018
10:39:51

Alexander
03.04.2018
10:44:48
было у олега

Leonid
03.04.2018
10:45:24
сколько нужно памяти на компиляцию?

Dmitry
03.04.2018
10:45:26
А как fix помогает от утечек?

Anatolii
03.04.2018
10:45:27
мне тоже нравится
но когда я это исопльзую ощущение что я переусложняю

Dmitry
03.04.2018
10:46:02
@qnikst А как fix помогает от утечек?

Index
03.04.2018
10:47:01
Сначала придумают карриррвание, а потом проблемы с ним решают

Anatolii
03.04.2018
10:47:47
опять типы не налезли