
A64m
28.03.2018
18:06:50
да поясни
https://simonmar.github.io/posts/2017-01-24-asynchronous-exceptions.html

Alexander
28.03.2018
18:07:00
+ асинхронные ещё

分解物質
28.03.2018
18:07:02

Alexander
28.03.2018
18:07:08
которые прилетуют в любой момент

Google

Alexander
28.03.2018
18:07:24
а ещё Either пока тормозит
это вам не раст
unboxed sum types пока не довезли

A64m
28.03.2018
18:07:51

kana
28.03.2018
18:08:04

Denis
28.03.2018
18:09:13

分解物質
28.03.2018
18:09:27

? animufag ?
28.03.2018
18:11:00
ну окей конкаренси совсем боль.
ну вот в сишке например возвращается null из fopen
почему в хаскеле обязательно должен быть эксепшен
я просто не понимаю этого фатализма резкого
что мол спросили вполне конкретный вопрос, а вы такие резко в крайности ушли
мол мы ничего с этим поделать не можем - жизнь опасна и жестока

A64m
28.03.2018
18:12:09
потому что уже в IO, в чистом коде есть смысл не исключения использовать, в IO уже нет, они просто удобнее будут

Alexander
28.03.2018
18:12:18
я вроде написал почему в haskell невозможно ловить все исключения

Google

Aminion
28.03.2018
18:12:26

Alexander
28.03.2018
18:12:30
более того нельзя перечислить все типы ошибок которые могут вернуться
2 раза написал минимум
но похоже это никому не интересно, т.к. мне не отвечали

? animufag ?
28.03.2018
18:13:15
ну ладно. я первый свернул тему не туда)

Alexander
28.03.2018
18:13:16
расширяемые исключения обычно удобнее чем Either
хотя я бы честно хотел видеть какие-то аннотации
типа функция может бросить вот это вот, и может что-то ещё

kana
28.03.2018
18:14:18
я так понял, если есть
class C a b | a -> b
type family F a b :: Constraint
то сделать
instance F a b => C a b
не получится, так как в F нет некой выводимости b из a (lhs type 'a' do not jointly determine rhs type ‘b’)

Alexander
28.03.2018
18:14:56
просто с EItherT все быстро печально становится
и толку нету все равно

分解物質
28.03.2018
18:15:28
експириенс с обработкой ексцепшенов в хаскеле это одна из причин быстрого падения моей воодушевлённости к хаскелю после прочтения LYAH и написания первых програм

Alexander
28.03.2018
18:16:16
а чего их ловить то?

? animufag ?
28.03.2018
18:16:26

kana
28.03.2018
18:16:44
да вроде как везде: в эффектном коде try/catch, в чистом either/except со своими try/catch

Denis
28.03.2018
18:19:38

分解物質
28.03.2018
18:20:42
а чего их ловить то?
1. когда "исключительная ситуация" это ожидаемая ситуация в моей програме
2. показать нормальное сообщение об ошибке вместо хаскелевского стактрейса

Alexander
28.03.2018
18:21:00
а смысле в чем сложность с этим?

分解物質
28.03.2018
18:23:10
у меня с catch получалось дико уродливая конструкция которую я ещё долго соображал как сделать

? animufag ?
28.03.2018
18:23:11
ну это как спрашивать в чём проблема писать без типов
ты не знаешь наверняка захендлился эксепшен где-то во вложенных функциях или нет

Google

? animufag ?
28.03.2018
18:25:39
(хотя лол - я сам же за сегодня дважды написал Left e -> error $ show e)

Aminion
28.03.2018
18:26:58

分解物質
28.03.2018
18:27:08

? animufag ?
28.03.2018
18:30:15

Denis
28.03.2018
18:30:29

kana
28.03.2018
18:41:27

Alexander
28.03.2018
18:45:38
с интегралами, почему не (b-a)/n?
чтобы ошибку то не накапливать
и потом [0..n] и все

kana
28.03.2018
18:46:08

Alexander
28.03.2018
18:46:13
ну или (b-a)/delta
если хочется так по немногу, то проще уже врапперы написать конечно

kana
28.03.2018
18:49:24

? animufag ?
28.03.2018
19:55:11
ну или (b-a)/delta
кажется это численная производная
ну и особо не понял про накопление ошибки
точнее не помню как оно оценивается вроде деление всё равно даст гораздо больше ошибки (ну это интуитивно)

Alexander
28.03.2018
19:56:00
2 варианта, или фиксированная дельта, тогда делим конец - начало на дельту получаем число шагов
или фиксированное число шагов, тогда длину шага считаем
каждая операция с IEEE будет накапливать ошибку, если не использовать спец схемы
поэтому a+d+d+d+d....
будет не тоже самое что a+d*n, для какого-то n

Google

Alexander
28.03.2018
19:57:06
@vlastachu ^

kana
28.03.2018
20:13:05

? animufag ?
28.03.2018
20:14:00

Alexander
28.03.2018
20:14:55
@kana_sama что если оба?
ветки

kana
28.03.2018
20:15:30
предположительно в обе не получится, но не уверен, что компилятору можно об этом сказать

Alexander
28.03.2018
20:16:08
вообще OVERLAPPABLE + {-# OVERLAPPING #-}
с некоторой долей олегинга можно наверное сказать
доп параметр дать + фундеп
@vlastachu ^

Alex
28.03.2018
20:32:56
Здравствуйте
Пытаюсь разобраться с сервантом
Подскажите пожалуйста
Что означают вот эти две строки
api :: Proxy Api
api = Proxy

Denis
28.03.2018
20:34:25
тайп левел магию)

kana
28.03.2018
20:37:06
api :: Proxy Api
api = Proxy
data Proxy (a :: k) = Proxy
тут Proxy-тип - конструктор типа с фантомным аргументом-типом любого каинда
по сути своей api - просто Proxy-значение с типом-фантомом Api
нужен для того, чтобы на термлевеле контролировать передачу чего-то на тайплевел (в данном случае Api)
idP :: Proxy a -> a -> a
idP Proxy x = x
x :: _ -- will be Int
x = idP (Proxy :: Proxy Int) 1
stringProxy :: Proxy String
stringProxy = Proxy
y :: _ -- String
y = idP stringProxy "123"
z = idP stringProxy 1 -- type error, String /= Int (or no Num String)

Google

Anton
28.03.2018
20:47:02
А это случайно не Geometric Numerical Integration?

Alex
28.03.2018
20:48:02
А что такое каинд?

Denis
28.03.2018
20:48:37

Alex
28.03.2018
20:49:25
Вроде же писали что сюда можно задавать подобные вопросы

Alexander
28.03.2018
20:50:29

Anton
28.03.2018
20:51:01
забавно через столько лет встретить снова в хаскель чате )

Alexander
28.03.2018
20:51:26

kana
28.03.2018
20:52:08
ЕСТЬ @haskell_learn

Alexander
28.03.2018
20:52:10

kana
28.03.2018
20:52:39
что за кибербуллинг чатов

Denis
28.03.2018
20:52:44
вообще смешно как-то работает
тут всех гонят в один

Alexander
28.03.2018
20:52:48
@al_bl https://wiki.haskell.org/Kind

Denis
28.03.2018
20:52:52
а там всех гонят в другой
мол, эта тема не для начинающих

Alexander
28.03.2018
20:53:24
@al_bl если после прочтения будут вопросы, то можно попытаться по русски объяснить:)
я уже писал почему я считаю разделение чятиков очень вредной вещью
уже один gitter так поломали

Denis
28.03.2018
20:54:37
сепаратисты

kana
28.03.2018
20:54:53
А что такое каинд?
вот есть у нас терм 2, он имеет тип Int
эта же логика переносится на уровень выше:
есть у нас тип Int, он имеет каинд Type
есть у нас терм-функция succ, которая принимает терм типа Int и отдает терм типа Int, то есть
succ :: Int -> Int
succ 2 :: Int
эта же логика переносится на уровень выше:
если конструкттор типа Maybe, который принимает тип каинда Type и отдает тип каинда Type, то есть
Maybe :: Type -> Type
Maybe Int :: Type
есть функция $, которая принимает функцию типа (a -> b) и значение типа a, отдает значение типа b
($) :: (a -> b) -> a -> b
f $ x = f x
succ $ 2 == 3
есть тип $, который принимает конструктор типов (Type -> Type) и тип Type и отдает тип Type
($) :: (Type -> Type) -> Type -> Type
type f $ x = f x
Maybe $ Int == Maybe Int
1 :: Int :: Type
не все типы имеют каинд Type или (Type -> k), где k - один из этих двух