Size: a a a

2021 March 02

С

Сергей in Haskell
ну типо того да
источник

С

Сергей in Haskell
линтипы
источник

к

кана in Haskell
с линтипами мы можем например указать, что хендл можно использовать ровно один раз и только один раз

h1 <- openFile "a" -- получили хендл
close h1 -- хендл заиспользовали, больше его использовать нельзя
value <- hGetLine h1 -- невалидно

можно получить такой апи:

h1 <- openFile "a" -- получили h1, который нужно заиспользовать ровно один раз

(h2, value) <- hGetLine h1 -- h1 заиспользовали, получили h2, который тоже нужно заиспользовать раз

close h2 -- нельзя не закрыть, потому что h2 нужно заиспользовать ровно один раз

f :: FilePath -> IO String
f path = do
 h <- openFile path
 (h, value) <- hGetLine h
 hClose h -- забыл написать - не тайпчекнулось
 pure value
источник

[

[BRM]White Rabbit in Haskell
кана
ты же сам про раст много пишешь
В книжке, которую я читаю, пошло про организацию модулей и я на неё немного подзабил😃
источник

MK

Maxim Koltsov in Haskell
кана
с линтипами мы можем например указать, что хендл можно использовать ровно один раз и только один раз

h1 <- openFile "a" -- получили хендл
close h1 -- хендл заиспользовали, больше его использовать нельзя
value <- hGetLine h1 -- невалидно

можно получить такой апи:

h1 <- openFile "a" -- получили h1, который нужно заиспользовать ровно один раз

(h2, value) <- hGetLine h1 -- h1 заиспользовали, получили h2, который тоже нужно заиспользовать раз

close h2 -- нельзя не закрыть, потому что h2 нужно заиспользовать ровно один раз

f :: FilePath -> IO String
f path = do
 h <- openFile path
 (h, value) <- hGetLine h
 hClose h -- забыл написать - не тайпчекнулось
 pure value
и писать грёбаные лесенки
источник

A

Arjaz in Haskell
-o
-o
-o
источник

MP

Misha Puzanov in Haskell
Maxim Koltsov
и писать грёбаные лесенки
Какие лесенки?
источник

MK

Maxim Koltsov in Haskell
ну вот эти h1, h2, h3...
источник

к

кана in Haskell
а тут на помощь приходит let-norec)
источник

к

кана in Haskell
ну правда в ду-нотации он и не нужен, если это не mdo
источник

[

[BRM]White Rabbit in Haskell
Ду- нотация это круто, ощущаешь себя будто не в фп, а в процедурке
источник

MP

Misha Puzanov in Haskell
Maxim Koltsov
ну вот эти h1, h2, h3...
а, типа нужно сочинять новые имена постоянно, чтобы не было shadowing warning? (я мудро пропустил летрек-срач)
источник

к

кана in Haskell
в целом не очень понимаю, зачем линтипы нужны хаскелю, но мне говорят все, что это позволит написать какие-то мощные оптимизации в либах
источник

MP

Misha Puzanov in Haskell
ну как минимум чтобы деаллоцировать значения не дожидаясь ГЦ
источник

K

Kir in Haskell
кана
в целом не очень понимаю, зачем линтипы нужны хаскелю, но мне говорят все, что это позволит написать какие-то мощные оптимизации в либах
Это поможет избавиться от ГЦ в некоторых алгоритмах.
источник

MP

Misha Puzanov in Haskell
а в случае INLINE и строгих данных аллоцировать-деаллоцировать большими кусками
источник

K

Kir in Haskell
С другой стороны, ГЦ вызывается только на аллокациях
источник

YS

Yan Shkurinskiy in Haskell
Я же так понимаю, что всё равно всё старое поколение очищается скопом? Я к тому, что мутабельных объектов не так и много, и всё равно когда настает время чистки - мы просто в основном копируем то, что на данный момент достижимо?
источник

АВ

Арсений Высоцкий... in Haskell
Dreamerinnoise
там нет хкт
Есть lightweight hkt
источник

ЗП

Зигохистоморфный Пре... in Haskell
кана
в целом не очень понимаю, зачем линтипы нужны хаскелю, но мне говорят все, что это позволит написать какие-то мощные оптимизации в либах
qtt интересней
источник