@haskellru

Страница 1187 из 1551
Alexander
12.05.2018
17:59:04
должно приходить

ну я до ghc скоро доберусь

Александр
12.05.2018
17:59:46
Еще нашел: The semantics of this re-export is a bit tricky, though. For example, what can we say about the following module? module M (module Data.List) where import qualified Data.List You’d probably think that module M now export everything that is exported by Data.List. Not at all! The standard says (emphasis is mine): Since we imported Data.List qualified, nothing from it is in scope under an unqualified name. So, M doesn’t export anything. Right? Not quite. https://ro-che.info/articles/2012-12-25-haskell-module-system-p1

IC
12.05.2018
18:09:19
есть где туториал как писать несложные древесные типы чтобы под них потом значения подгонять?

Google
Александр
12.05.2018
18:16:16
-- STM-Free, basic tweaks, Data.Map - IO Refs + Any 445.0 nsТакие дела. Похоже, мне таки придется остаться на Data.Map

A64m
12.05.2018
18:18:04
вот это подозрительно уже

IORefы тут что означают?

IC
12.05.2018
18:19:11
ничего непонятно
как в schematic, только совсем простые

Александр
12.05.2018
18:19:53
IORefы тут что означают?
У меня изначально данные тварей в рефах хранились. Потом я убрал эти рефы

A64m
12.05.2018
18:20:40
а, минус рефы, понятно

Александр
12.05.2018
18:20:59
-- STM-Free, basic tweaks, Data.Map - IO Refs + Any 445.0 ns -- STM-Free, basic tweaks, HMap - IO Refs 509.2 ns Между этими случаями разница исключительно в мапе

Но это были, конечно же, только "грязные" замеры, чтобы хотя бы приблизительно понимать порядок проблемы. Более правильное исследование я только собираюсь сделать

A64m
12.05.2018
18:22:03
а ключи в случае Data.Map какие?

Александр
12.05.2018
18:22:14
Пока те же, Data.Unique

Как раз сейчас делаю Int

То есть, ключи везде одинаковые были

Google
A64m
12.05.2018
18:24:10
с них, наверное, и надо было начинать, контейнерные библиотеки в которых хеши считаются к такому могут быть чувствительны

Александр
12.05.2018
18:24:44
Не исключено.

Мне надо какой-то конструктор сделать, чтобы имплементацию того и сего выбирать

-- stm-free, basic tweaks, with Data.Map - IORefs + Any + Int keys: 317.5 nsЗамена Data.Unique на целый ключ, пусть даже с atomicModifyIORef', дала хороший пинок предыдущему результату на Data.Map.

Для случая hashtables замена Data.Unique на Int результатов не принесла. Было и стало: -- STM-Free, basic tweaks, hashtables + Any - IO Refs 843.3 ns -- STM-Free, basic tweaks, hashtables + Any - IO Refs + Int keys 859.6 ns

A64m
12.05.2018
19:05:04
а Data.IntMap?

Александр
12.05.2018
19:08:25
О! Еще не пробовал

Data.IntMap относительно Data.Map с целыми ключами: опять обман ожиданий. Было и стало: -- stm-free, basic tweaks, with Data.Map - IORefs + Any + Int keys: 317.5 ns -- stm-free, basic tweaks, with Data.IntMap - IORefs + Any + Int keys: 366.5 ns

Sergey
12.05.2018
21:02:48
https://pbs.twimg.com/media/DdBhSO4WkAUtaXq.jpg:large

блин, обрезали на самом интересном месте (

Dmitry
12.05.2018
21:05:33
Можно как-то красиво сделать линзу по двум полям, если есть линзы по обоим полям? Я могу сделать get и set для двух полей, потом lens2 = lens get set. Красивее можно?

Dmitry
12.05.2018
21:26:34
есть запись, линзы по полям. Хочу иметь линзу по двум полям.

A64m
12.05.2018
21:27:57
alongside ?

Dmitry
12.05.2018
21:27:59
хм, правда, чего я хочу? :-)

видимо, чтобы была линза по (f1,f2)

Denis
12.05.2018
21:28:51
только глянул на alongside)

Dmitry
12.05.2018
21:29:33
про alongside это мне? А что это?

Denis
12.05.2018
21:30:59
про alongside это мне? А что это?
https://www.stackage.org/haddock/lts-11.8/lens-4.16.1/Control-Lens-Lens.html#v:alongside

Dmitry
12.05.2018
21:33:36
да, спасибо!

Google
Denis
12.05.2018
21:34:24
можно конечно сделать так, что модификацию применять по нескольким полям, но тип у них должен быть одинаков

(~&~) = liftA2(>=>) data A = A { _a :: Int, _b :: Int } deriving Show makeLenses ''A a1 = A 10 20 a1 & (a ~&~ b) %~ (*3)

Aleksei
12.05.2018
22:10:55
Почему монады являются эндофункторами? Мы же можем из Monad A сделать Monad B, где A и B - не обязательно один и тот же тип.

Denis
12.05.2018
22:12:20
Почему монады являются эндофункторами? Мы же можем из Monad A сделать Monad B, где A и B - не обязательно один и тот же тип.
но коробочки то одинаковы, ты не меняешь оболочку, а в ТК пофиг на содержимое

λoλcat
12.05.2018
22:16:54
чтобы join можно было сделать

Но вот папир, где это не обязательно: https://arxiv.org/abs/1412.7148

Aleksei
12.05.2018
22:20:15
Понял. А моноидность откуда появилась? Между монадами должна быть какая-то моноидальная опеарция определена, а также нейтральный элемент.

kana
12.05.2018
22:20:29
композиция

перепиши join как естественное преобразование, чтобы увидеть морфизмы в категории эндофункторов

type f ~> g = forall a. f a -> g a join :: m (m a) -> m a join :: (m . m) a -> m a join :: m . m ~> m pure :: a -> m a pure :: Identity a -> m a pure :: Identity ~> m pure :: 1 ~> m

Denis
12.05.2018
22:22:48
Compose/Identity

Aleksei
12.05.2018
22:24:58
Спасибо

Denis
13.05.2018
09:57:37
https://github.com/tommythorn/Reduceron

Александр
13.05.2018
09:59:25
А я слышал про этот проект.

A64m
13.05.2018
10:25:08
его не так давно кто-то гальванизировал

а, ну собственно это этот форк и есть

Ilya
13.05.2018
12:17:35
Почему люди часто возмущаются функциями head и tail? ? В этом чате не раз слышал.

Kirill
13.05.2018
12:20:06
частичные функции - способ выстрелить себе в ногу

Alexander
13.05.2018
12:20:55
можно как то в hasql получить имя колонки по идексу аля postgresql-libpq?

Google
patinity
13.05.2018
12:23:17
хаскелл + телеграм бот библиотеки интересно найти, имеет смысл в чат спрошивать или все должно быть на hackage?

Alexander
13.05.2018
12:23:29
ну или вообще как решается типовая задача "распарсить row в рекорд"?

IC
13.05.2018
12:23:50
частичные функции - способ выстрелить себе в ногу
Хуже того. Это способ выстрелить мне в ногу!

Alexander
13.05.2018
12:23:59
или в hasql не принято использовать 'select *'?

Alexander
13.05.2018
12:24:18
CC @wormholio

вообще проблемы с head/tail переоценены

Ilya
13.05.2018
12:25:05
частичные функции - способ выстрелить себе в ногу
Эксепшн это выстрел в ногу? Что-то новенькое. По моему понимаю, выстрел в ногу, это когда произошла ошибка, но программа продолжает работать вместо падения. Неаккуратное обращение с указателями в си++, например.

Alexander
13.05.2018
12:25:05
а то некоторые вводят только безопасные варианты с Maybe или хуже того 100500 вариантов, как safe

Alexander
13.05.2018
12:25:20
но проблемы есть

если есть функция foo :: Int -> Int

получить исключение внутри из-за tail печально

но не то, чтобы банить использование функций навсегда

или везде использовать NonEmpty

Ilya
13.05.2018
12:26:42
получить исключение внутри из-за tail печально
да, но называть это "выстрелом в ногу" я бы не стал. Рантайм вполне доходчиво говорит, в чём проблема, а не делает втихую какую-то гадость.

Andrey
13.05.2018
12:26:48
или дефолтное значение вместе с передавать

Alexander
13.05.2018
12:27:02
Nil возвращать

Ilya
13.05.2018
12:27:05
а что касается варианта с Maybe — с ним так же можно упасть

Alexander
13.05.2018
12:27:08
welcome to clojure

Ilya
13.05.2018
12:27:15
сделав \(Just h) -> h

Google
Ilya
13.05.2018
12:28:29
ну т.е. сигнатура head :: [a] -> Maybe a сама по себе никак не защищает от падения программы. Защищает от падения программы нормальная обработка кейсов Maybe — и Just, и Nothing. Но точно так же можно обработать два случая списка: пустой и не пустой. И в чём разница???

Alexander
13.05.2018
12:28:42
вообще функция по типу которой неочевидно, что она падает это плохо

A64m
13.05.2018
12:28:43
Почему люди часто возмущаются функциями head и tail? ? В этом чате не раз слышал.
потому, что у хаскеля плохие сообщения об ошибках в рантайме

Kirill
13.05.2018
12:29:02
да, но называть это "выстрелом в ногу" я бы не стал. Рантайм вполне доходчиво говорит, в чём проблема, а не делает втихую какую-то гадость.
у нас тут статическая типизация вроде, перетаскивать в рантайм не так чтоб кул, ну и с трейсами в хаскеле не так чтоб всё гладко в отличие от всяких строгих языков

Alexander
13.05.2018
12:29:17
т.е. не надо использовать head где он падает

Andrey
13.05.2018
12:29:29
ошибки не нужны

Ilya
13.05.2018
12:29:38
у нас тут статическая типизация вроде, перетаскивать в рантайм не так чтоб кул, ну и с трейсами в хаскеле не так чтоб всё гладко в отличие от всяких строгих языков
ну поинт в том, что c head :: [a] -> Maybe a так же можно упасть в рантайме. хаскель никак не проверяет, что Nothing обработан

Kirill
13.05.2018
12:30:01
мой пойнт был про частичные функции

Alexander
13.05.2018
12:30:10
это invariant violation и все такое

Kirill
13.05.2018
12:30:15
ты якобы его переборол введя ещё одну частичную

ССЗБ

Andrey
13.05.2018
12:30:47
добавьте к ним функцию с дефолтным значением, чтобы обходить краевые условия

Ilya
13.05.2018
12:31:25
IC
13.05.2018
12:32:07
вообще проблемы с head/tail переоценены
Нифига. Регулярно имею с ними проблемы.

Kirill
13.05.2018
12:33:08
1) делать кейс вместо head; 2) заиметь явные гарантии в коде и написать коммент коль хаскель не может вывести; 3) NonEmpty

Alexander
13.05.2018
12:33:49
head нужно использовать только там где он действительно не падает, и есть инвариант

проблема с ним что система типов этот инвариант не энфорсит никак

Andrey
13.05.2018
12:34:31
в пурсе head вернёт Maybe a

Alexander
13.05.2018
12:34:38
исключение нечитабельное

Ilya
13.05.2018
12:34:51
в пурсе head вернёт Maybe a
а пурса гарантирует, что программист не забудет обработать Nothing?

A64m
13.05.2018
12:35:08
нет конечно

Страница 1187 из 1551