@haskellru

Страница 443 из 1551
Kirill
29.09.2017
07:45:32
Alexander
29.09.2017
07:45:44
mtl-style это выше что предложили

вот, если есть такая структура данных ты можешь её подменять

Kirill
29.09.2017
07:46:01
Mtl как раз знаю

Google
Yuriy
29.09.2017
07:46:03
в линзах есть класс TraversableWithIndex, можешь его заюзать
можнопример какой-нибудь? у меня ни разу не получалось его использовать

Mikhail
29.09.2017
07:46:03
data MyDb = MyDb { operation1 :: .. -> IO ..., opertation2 :: .. -> IO ..}
у меня не было ни единого положительного опыта с таким подходом (он называется configuration datatype?)

Alexander
29.09.2017
07:46:16
причем такой варинт легко поднимается в mtl style

Kirill
29.09.2017
07:46:42
Это похоже на упрощение идеи с тайпклассами

Alexander
29.09.2017
07:46:50
хуже только тем,что оно ганартировано не заинлайнится

Yuriy
29.09.2017
07:47:00
когда мне надо было в мапе на ключи смотреть, я изоморфировал её в assocs

Kirill
29.09.2017
07:47:08
Точнее на спуск с уровня типов, на уровень данных

Artyom
29.09.2017
07:47:12
Yuriy
29.09.2017
07:47:15
assocs = iso Map.assocs Map.fromList

Mikhail
29.09.2017
07:47:27
причем такой варинт легко поднимается в mtl style
его нужно абстрагировать по m и потом делать hoist миллиарды раз

Alexander
29.09.2017
07:48:17
делаешь класс class HasDb m where getDb :: m MyDb

class MonadDb m where ... op1 :: .. -> m ... default op1 :: HasDb m, MonadIO m => ... -> m ,,, op1 = getDb >=> liftIO op1

@volhovm ^

Google
Alexander
29.09.2017
07:50:02
добавление в mtl стек будет таким сложным как instance HasDb X where ... ; instance MonadDb X

Mikhail
29.09.2017
07:50:07
Ну мне кажется это не особо стандартный юзкейс

типа, зачем хранить и то и другое

вот то ли дело если ты в рантайме кладешь такую конфигурацию в Reader

Alexander
29.09.2017
07:50:52
что значит то ли дело? так и делаешь

Mikhail
29.09.2017
07:50:54
особенно все усложняется если метод конфигурации это что-то сложнее

типа там

data Conf = Conf { confFoo :: m Kek -> SomeShitT m () }

Alexander
29.09.2017
07:51:31
зачем там m?

Mikhail
29.09.2017
07:51:42
Я как-то пытался пихать ResourceT $ ConduitT $ ... чето такое в конфигурацию

зачем там m?
коллбэк

ну захотелось :p

или какой-нибудь экшн иницилизации

Alexander
29.09.2017
07:52:54
в этом подходе клей по IO работает

и делать hoist $ control $ \mmorph -> ...

или ещё что

@saksmt библиотеки resourcet и conduiit смотри

Mikhail
29.09.2017
07:53:44
hoist работает, но это боль страшная как по мне

Alexander
29.09.2017
07:53:59
ну у нас с monad-control норм

Google
Alexander
29.09.2017
07:54:42
в большинстве случаев такие структуры только IO должны знать или если там forall m . Monad m => написать можно

Mikhail
29.09.2017
07:55:02
Вообще мы еще пользуемся параметризуемой базой

типа там

не IO, а что-нибудь другое, что в тестах меняется

поэтому всякие такие конфигурации обрастают дичью

Alexander
29.09.2017
08:00:09
ну я толковых вещей с подменой base monad в тестах особо не видел, не сталкивался не знаю

ха... сотрудники из швейцарии находят первую озвученную цену на f(by) достаточно большой

Quet
29.09.2017
08:05:58
а какая цена? )

Alexander
29.09.2017
08:06:23
там висело что-то вроде 930$ но комментариев от организатором не было, может и ошибка

щас написано скажут позднее

Mikhail
29.09.2017
08:06:40
функция от беларусских рублей? ?

Quet
29.09.2017
08:07:12
930$ за f.by это как-то дохера

Alexander
29.09.2017
08:07:16
Dmitry @meilalina а может уже известен хотя бы порядок

учитывая изменение бел рублей - функция вполне возможно

Mikhail
29.09.2017
08:08:09
Я погуглил — можно было название и более адекватным придумать конечно

Andrei
29.09.2017
08:08:12
Dmitry @meilalina а может уже известен хотя бы порядок
в прошлом году было порядка 100$ емнип

Mikhail
29.09.2017
08:08:30
А че, в чем соль конфы? Какие спикеры хорошие есть?

Andrei
29.09.2017
08:08:56
снойман пойдёт?

Mikhail
29.09.2017
08:09:27
Ну так

Google
Mikhail
29.09.2017
08:09:58
Я посмотрел предыдущий год уже, да.

Andrei
29.09.2017
08:10:30
https://twitter.com/ruHaskell/status/910124053624696832 пока только вот так

Alina
29.09.2017
08:14:09
Привет! Да, это ошибка, прошу прощения. Будет цена примерно как и в прошлом году

Aleksey
29.09.2017
08:26:52
Отлично!

Alexander
29.09.2017
08:36:45
@meilalina спасибо!

kana
29.09.2017
12:23:30
Хм, могу предположить, что писать f x = g (runX x) зачастую предпочтительнее, чем f (X x) = g x Из-за лени (ну и немного для инкапсуляции). Ранее я часто использовал именно второй вариант, который субъективно проще выглядит, и не понимал, почему так часто используют первый

Aleksey
29.09.2017
12:25:01
почему? Матчинг точно так же не будет производиться. пока кто-то не сфорсит вызов f и g

kana
29.09.2017
12:25:21
То есть разницы нет?

Aleksey
29.09.2017
12:25:22
Ну и компилятору всяко виднее, как такое оптимизировать

Нет

(но это не точно)

Artyom
29.09.2017
12:25:58
если X – это ньютайп, то вроде бы разницы вообще ровно ноль и лень на ньютайпы не работает

Aleksey
29.09.2017
12:26:00
первый лучше хотя бы тем, что можно написать f = g . runX :)

Mikhail
29.09.2017
12:26:02
Artyom
29.09.2017
12:27:06
> newtype X a = X {runX :: a} > let f (X x) = 0 > f undefined 0

Aleksey
29.09.2017
12:27:39
ага, матчинг не форсится, если матчимое не используется нигде

Artyom
29.09.2017
12:27:43
нет

> data Y a = Y {runY :: a} > let g (Y y) = 0 > g undefined *** Exception: Prelude.undefined

это конкретно фишка ньютайпов

• для newtype, wrap/unwrap ничего не делают в рантайме (они всего лишь меняют тип в компайл-тайме) • а для data – делают

Google
Aleksey
29.09.2017
12:28:48
Хмм... ньютахп выродится в f x = 0

λ> data Y a = Y { runY :: a } λ> let f (Y y) = 0 λ> f (Y undefined) 0

kana
29.09.2017
12:31:16
Как-то это не очень интуитивно. А, нет, таки норм, сматчил, но значение не достал. А ньютайп попросту и матчить не нужно

Aleksey
29.09.2017
12:31:38
Если знать, во что превращаются ньютайпы, то всё логично

Но это дополнительный контекст, не отраженный в типе. Что напрягает, да

Andrew
29.09.2017
14:28:39
Andrei
29.09.2017
17:06:42
видел ли кто-нибудь из присутствующих http://www.luna-lang.org вживую?

kana
29.09.2017
17:07:28
Полгода назад подписался, новостей и альфы так и не было

Alexander
30.09.2017
06:47:48
Какую prelude юзать? Protolude, base-prelude, classy-prelude или ещё что-то?

Denis
30.09.2017
06:48:32
первую)

Anatolii
30.09.2017
06:49:15
а как же https://github.com/serokell/universum ?:)

Alexander
30.09.2017
08:00:34
universum, на него хоть ругаться тут можно

или base, говорят вполне терпим

Yuriy
30.09.2017
12:07:17
или вообще никакого

Artyom
30.09.2017
12:14:42
Какую prelude юзать? Protolude, base-prelude, classy-prelude или ещё что-то?
я обычно вот так делаю: https://github.com/aelve/guide/blob/master/src/Imports.hs

если что-то маленькое, то просто base-prelude, если что-то побольше, то Imports.hs, в котором всё, что мне нравится

Aleksey
30.09.2017
12:18:19
Прелюдии, это не только импорты

Artyom
30.09.2017
12:19:53
в абсолютном большинстве это импорты + прятание вредных импортов типа head + какие-нибудь самописные классы

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