Aleksei (astynax)
что ты имеешь в виду?
В питоне всё что угодно "имеет смысл" в булевом контексте - bool(any) сработает всегда
Alexander
Ближайшие конференции:
Ноябрь ?? - Москва, в Kaspersky https://mobile.twitter.com/cblp_su/status/912940905757396992
Декабрь 2 - Москва fpconf http://fpconf.ru/
Декабрь 17 - F(by) Conf http://fby.by
Andrei
Aleksei (astynax)
Строгая==Статическая, что ли?
Andrei
Да.
Cheese
первый раз такую интерпретацию слышу
Cheese
зачем называть статическую строгой?
Alexander
эм?
Alexander
>>> a = "a"
>>> a+1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
Alexander
строгая, динамическая
Alexander
переменная a имеет "runtime-тип" str
Aleksei (astynax)
В питоне переменная не имеет типа. Объект, на который она ссылается, имеет
Alexander
ок, strong
Alexander
что такое переменная?
Cheese
стронгая типизация, ага
Aleksei (astynax)
имя-ссылка
Cheese
в строко типизированном языке
Aleksei (astynax)
String dynamic typing - знакомая штука
Alexander
врочем сейчас открыл tappl и потом тырнеты и не нашёл на что согласться говоря про строгая
Aleksei (astynax)
В бейсике, кстати, типизация strong :) Строки с чиселками не складываются ну никак
Aleksei (astynax)
А вот переменные не знают о типе содержимого, поэтому все ошибки типизации - только в рантайме
Alexander
ну считать ли теги типами вопрос открытый
Alexander
и согласно таплу это не хорошо, но исторически сложилось
Alexander
так что я думаю эту часть дискуссии можно в очередной раз не развивать?
Aleksei (astynax)
можно не развивать, это правда
Зигохистоморфный
https://github.com/mckayb/phantasy-recursion-schemes/blob/master/src/functions.php :D
Зигохистоморфный
кто поведает мне о loeb / moeb ? зачем и почему?
Зигохистоморфный
в линзах есть cosmos зачем?
Aleksei (astynax)
там ещё и базар есть :)
Дима
В flowtype мощный статический type inference
Дима
Причём выводится без хаков, через честные bounds. Ковариантность, контрвариантность в комплекте. Динамические хаки языка — за бортом
Зигохистоморфный
Дима
Aleksei (astynax)
Но покуда сам язык слабый, всегда остаётся вероятность пропустить багу из-за недостаточного ума анализатора
Aleksei (astynax)
Так что "сначала напишем, а потом анализатор прогоним" работает плохо, ибо "потом прогоним анализатор" выливается в "тут-то точно всё ок будет, поэтому поставим игнор-коммент"
Дима
Весь код by default считаем забагованным пока не доказанно обратное
Так как можно из любого mixed пошагово вывести доказательство корректности любого разумного типа, то это вполне естественная рабочая ситуация
Дима
Дима
Как винить производителей ножей, что ими не только картошку чистят
Aleksei (astynax)
Если есть язык, где нельзя выключить статическую типизацию и прострелить себе всё, то лучше использовать этот язык
Дима
Дима
А то unsafeCoerce, не комильфо как-то
Alexander
да ладно
Alexander
-defer-type-errors
Alexander
и вперёд
Alexander
qnikst@qwork ~ $ cat 1.hs
i :: Int
i = 1
s :: String
s = "s"
p :: Bool
p = i + s
main = print p
qnikst@qwork ~ $ ghc 1.hs -fdefer-type-errors -fforce-recomp
[1 of 1] Compiling Main ( 1.hs, 1.o )
1.hs:8:5: warning: [-Wdeferred-type-errors]
• Couldn't match expected type ‘Bool’ with actual type ‘Int’
• In the expression: i + s
In an equation for ‘p’: p = i + s
1.hs:8:9: warning: [-Wdeferred-type-errors]
• Couldn't match type ‘[Char]’ with ‘Int’
Expected type: Int
Actual type: String
• In the second argument of ‘(+)’, namely ‘s’
In the expression: i + s
In an equation for ‘p’: p = i + s
Linking 1 ...
Дима
Тоже хороший вариант, да)
Alexander
вон скомпилялось
Alexander
qnikst@qwork ~ $ ./1
1: 1.hs:8:9: error:
• Couldn't match type ‘[Char]’ with ‘Int’
Expected type: Int
Actual type: String
• In the second argument of ‘(+)’, namely ‘s’
In the expression: i + s
In an equation for ‘p’: p = i + s
(deferred type error)
Alexander
ошибки типов в рантайме, все как у взрослых
Alexander
• Couldn't match type ‘StM m ()’ with ‘()’
Expected type: IO (StM m ())
Actual type: IO ()
ну вот опять : (
Alexander
при MonadBaseControl IO m
Alexander
и StM IO () ~ ()
Дима
Придётся всё на MLTT переписывать
Anatolii
@qnikst а я правильно понимаю что UnliftIO сномановское решает туже проблему что и MonadBaseControl ?
Alexander
без понятия
Alexander
это moand-control без автовывода и только над IO ?
Anatolii
я насчет первого не очень понял
Alexander
хотя тут ошибка по делу
Alexander
правда не понимаю почему оно работало до этого
Alexander
@cblp_su помнишь на на monad-control ругался
Alexander
я нашёл у себя проблему похоже
Alexander
правда я теперь не понимаю, почему оно раньше работало
Cheese
Alexander
я ещё минимальный case говорил что покажу
Alexander
у меня withAsync не работало, когда поидее конексты все определяются
Cheese
а, это
Cheese
ты ругался, что сообщение об ошибке не соответствует реальной ошибке
Alexander
да
Alexander
это основной point
Alexander
он остается
Кабачок
Alexander
ура