@haskellru

Страница 1463 из 1551
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
не хочешь пиши unsafe head и не трать время
с ликвид хаскелем можно получше, просто в прекондишены функции которая head использует поднять это условие а там уж пусть у пользователя этой функции голова болит

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.

а почему в кассаве нету FromRecord a, FromRecord b => FromRecord (a,b)
мне как-то пришлось написать такой инстанс для оптпарс-дженерик (не для тупла, для самообъявленной пары, правда)

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
типа Y [("foo", A), ("bar", B)]
Есть моя либа, которая умеет так aeson-injector

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
deriving (...) deriving newtype (FromJSON, ToJSON)
я не понял как это мне поможет...

вот есть у меня типы 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)

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
не в идеале я готов написать Right ( "a" .= a .&. "b" .= b .&. Z)
это пока там мало полей кажется, что такое удобное

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
боты умеют нажимать на кнопки
в БотАПИ есть такие методы?

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