
Alexander
14.09.2018
11:12:03
типа:
{-@ Exception when (a is []) EmptyList @-}
head :: [a] -> a
и модификаторы типа safe и unsafe
хочешь заставить себя работать честно пиши safe head и подавай с scope доказательство
не хочешь пиши unsafe head и не трать время

Google

Alexander
14.09.2018
11:13:47
или safe @ onPredicateFailure head чтобы определить что делать в случае падения предиката

Kirill
14.09.2018
11:13:47

Alexander
14.09.2018
11:14:05
unchecked же для Int?
Prelude> maxBound + (1::Int)
-9223372036854775808

Kirill
14.09.2018
11:14:38
не, ну чтоб safe был совсем
надо бы checked

Alexander
14.09.2018
11:14:45
другое дело, что если там не Int а свой тип

A64m
14.09.2018
11:15:05
надо для всех функций которые кидают просто стек-контекст выводить. если функция короткая то она заинлайнится и от контекста тормозов не будет, если здоровенная, то тормоза не будут заметны, а если стектрейсы будут нормальные особо и жаловаться на нетотальные функции перестанут
хотя это измерять надо, конечно

Alexander
14.09.2018
11:16:13
ну т.е. safe / unsafe модификатор был бы прикольный
пишешь unsafe функцию + контрейнты
ну или safe + констрейнты
и переключалка

Google

Anton
14.09.2018
11:16:34
Мне не особо нравится, когда hmatrix вылетает с error от head, даже если там стектрейс будет

Alexander
14.09.2018
11:16:39
чтобы не делать либу типа safe

A64m
14.09.2018
11:18:50

Alexander
14.09.2018
11:19:20
да, ликвид хаскель хороший в этом отношении

A64m
14.09.2018
11:22:04
пока чего-то такого нету из коробки с нетотальными функциями воевать рано, очень уж страшный код получится

Alexander
14.09.2018
11:23:51
и тормозной не по делу

Anton
14.09.2018
11:24:41
Особенно радует, когда приходится форкать либу, чтобы в чистом коде не вылетало что-то подобное https://www.stackage.org/haddock/lts-12.9/base64-bytestring-1.0.0.1/src/Data.ByteString.Base64.Internal.html#encodeWith
error "Data.ByteString.Base64.encode: input too long"
и из чистого кода прилетает в хендлер сервака, итого 500

A64m
14.09.2018
11:27:30
Я, кстати, зря решил что 2+2 выкинет эксепшон при попытке компактнуть, потому что функции не компактятся. он же просто вычислил перед этим - да и все. сейчас проверил

Dmitry
14.09.2018
11:30:14
Идеально, спасибо
Пожалуйста! Приятно, что людям интересны и полезны блог-посты, над которыми ты трудишься ?
Кстати, как раз вчера-сегодня дошли руки смонтировать и выложить видео с выступлением по теме этого же блог поста:
https://youtu.be/GLtp3Xy7Rps
Качество не самое лучшее, потому что пришлось выкручиваться, как могли, но что поделать.

Anton
14.09.2018
11:30:15
Но это всё скорее из-за неудачных решений в либах, чем от отсутствия тотальности по-умолчанию

Alexander
14.09.2018
11:31:09
пошли пул реквест!
(хахаха)

Anton
14.09.2018
11:31:24
*нервный смех*

A64m
14.09.2018
11:36:36
(автор пакета едет где-то на велосипеде и зловеще хохочет)

Anton
14.09.2018
11:37:44
(и дело происходит 19 Апреля)

Alexander
14.09.2018
11:42:17
а почему в кассаве нету FromRecord a, FromRecord b => FromRecord (a,b)
хотя бы через какой-нибудь wrapper
хотя наверное ясно

Google

A64m
14.09.2018
11:45:53
> Have you felt guilty learning haskell?
> I always end up feeling really guilty for spending so much time trying to learn the basics when I could be spending this time learning something like golang where I could perhaps build something.

Alexander
14.09.2018
11:50:10
ктста
а никто не знает есть ли уже готовый тип и инстанс для Aeson для гетерогенного списка с префиксами
типа Y [("foo", A), ("bar", B)]
который бы парсил {"foo": A, "bar": B}
а то я накостылял, это конечно строк 20 но все же

Andrey
14.09.2018
11:52:44
deriving newtype работает как надо

Anton
14.09.2018
11:53:10

Alexander
14.09.2018
11:53:29
deriving newtype?

Anton
14.09.2018
11:53:32
WithField "foo" A (OnlyField "bar" B)

Alexander
14.09.2018
11:54:48
нормально

Alexander
14.09.2018
11:54:59
теперь надо решить хочу ли я свои 20 строк менять на либу
но главное уже есть на hackage

Anton
14.09.2018
11:55:42
со stackage выпилили, пока я был в отпуске

Andrey
14.09.2018
11:55:51
deriving (...)
deriving newtype (FromJSON, ToJSON)

Anton
14.09.2018
11:55:52
надо снова им PR открыть

Alexander
14.09.2018
11:56:37
вот есть у меня типы A , B лежащие в разных местах
я не хочу писать A_PLUS_B = A { a:: A, b::B}

Google

Alexander
14.09.2018
11:58:04
в идеале я хочу написать:
x <- Yaml.decodeFile ...
case x of
Rigth ( "a" .= a & "b" .= b) -> ...
и чтобы у меня все вывелось
не в идеале я готов написать Right ( "a" .= a .&. "b" .= b .&. Z)

Алексей
14.09.2018
11:58:39

Alexander
14.09.2018
11:59:09
ещё в меньшем идеале я готов написать type annotation для Yaml.decodeFile @ [...] ...
я сейчас нахожусь тут

Andrey
14.09.2018
11:59:34
тада не получится
если бы у тебя обёртка была над каким-нибудь Object, то тогда помогло бы

Admin
ERROR: S client not available

Alexander
14.09.2018
12:00:06
с aeson-injector я похоже буду находиться там же
(а ну у меня не надо в Right писать имена полей)
но я бы их лучше писал, если это позволит не писать аннтацию типа, в общем или одно или другое)

Anton
14.09.2018
12:02:23
Нус, это немножко сторонний юзкейс для моей либы
мне изначально надо было добавлять одно-два поля в большие респонсы от других подсистем

Alexander
14.09.2018
12:03:22
угу
вообще наверное мне тоже такое полезно
надо будет подумать
пока у меня это для разбора конфигов используется
где есть 100500 подсистем и хочется их в файлике отдельно хранить и дешево разбирать

Anton
14.09.2018
12:04:56
я бы тут всё равно тип обёртку написал и вывел аесон для неё

Andrey
14.09.2018
12:05:18
а etc не годится?

Google

Anton
14.09.2018
12:05:36

Alexander
14.09.2018
12:06:17
ну у меня штук 7 уже
для юзкейса где ты сразу же дестрактишь структуру это удобнее

Andrey
14.09.2018
12:06:52
https://hackage.haskell.org/package/etc

Alexander
14.09.2018
12:08:18
может ещё .property файлы в .jar?
какой-то страшный оверкилл
:)
там пример программы больше чем у меня буков раза в 4

Andrey
14.09.2018
12:10:53
окей

Anton
14.09.2018
12:11:11
Энтерпрайзненько

Alexander
14.09.2018
12:11:23
т.е. мне кажется что если нужно такое решение, то лучше брать клиент
к etcd или консулу
а так или тупую читалку окружения или конфиг файла иметь и все

Terminator
14.09.2018
12:58:34
@Asinthew будет жить. Поприветствуем!

Anton
14.09.2018
13:00:27
Боты не умеют нажимать на кнопки?

Iliya
14.09.2018
13:01:32
если бот написан как клиентский ТГ то умеет, а обычный через АПИ наверное нет

kana
14.09.2018
13:04:02
боты умеют нажимать на кнопки
не теоретически, а практически в другой группе боты обходили терминатора

Iliya
14.09.2018
13:04:59