
Daniel
23.07.2018
09:52:02

Александр
23.07.2018
09:52:49

Алексей
23.07.2018
09:53:01

Index
23.07.2018
09:53:06
Нет, тогда это будет рантайм-ошибка у юзера, мол не удалось "скомпилировать"

Google

Daniel
23.07.2018
09:53:22

A64m
23.07.2018
09:53:26

Index
23.07.2018
09:53:36
короче, не знаю как лучше терминологию подобрать, но меня лично волнует, что мне компьютер с кодом поможет до того, как я его юзеру отправлю или задеплою на сервер
системы типов с этим помогают. то, что не помогает, типами быть не может

Алексей
23.07.2018
09:54:44

Александр
23.07.2018
09:54:53

Index
23.07.2018
09:55:12
это называется тестирование

Александр
23.07.2018
09:55:23
Это подходит под определение

Алексей
23.07.2018
09:55:42
потому что определение неправильное

dimiii
23.07.2018
09:55:48
Хм, чем же доказательство отличается от проверки?

Index
23.07.2018
09:55:56
Это подходит под определение
тестирование отличается от типов, потому что доказывает корректность поведения программы при заданных сценариях (пусть их и миллион), а не отсутствие некорректного поведения by construction

A64m
23.07.2018
09:56:12

Александр
23.07.2018
09:56:22

Google

Алексей
23.07.2018
09:56:50

Denis
23.07.2018
09:57:05
Как тут оживленно

A64m
23.07.2018
09:57:22
ну так сделали язык с сабтайпингом - ясно что дураки, какие еще варианты-то?

Index
23.07.2018
09:58:12
Окей, принимается.
я использую тесты когда системы типов не хватает
в языке без системы типов, как Python, естественно надо всё покрыть тестами, чтобы хоть чуть-чуть рассудка сохранить
поэтому они там на TDD помешаны

Антон
23.07.2018
09:59:30

dimiii
23.07.2018
09:59:33

A64m
23.07.2018
10:00:30
обычно так прямо в статьях не пишут Ж((

Алексей
23.07.2018
10:00:55
сабтайпинг - это что? наследование чтоли?

A64m
23.07.2018
10:01:09
не обязательно

Антон
23.07.2018
10:01:13
Наследование - это как бы субтипирование, только сломанное

Sunny
23.07.2018
10:02:36
Че пацаны
Мутабельность?

Алексей
23.07.2018
10:02:41
а что в нём сломанного?

A64m
23.07.2018
10:03:20

Александр
23.07.2018
10:04:01
Кстати, почему фиолетовый и зеленый круги не пересекаются? Разве не существует людей со взвешенной позицией?

Yuriy
23.07.2018
10:04:52

A64m
23.07.2018
10:05:39

Google

Александр
23.07.2018
10:06:23

Index
23.07.2018
10:06:24

Yuriy
23.07.2018
10:06:48

A64m
23.07.2018
10:07:13
так их не делает никто потому-что

IC
23.07.2018
10:07:46

Алексей
23.07.2018
10:07:46

A64m
23.07.2018
10:08:10
динамические языки это ж не какая-то альтернатива, а просто устаревшая в конце 70-х технология.

Александр
23.07.2018
10:08:14
Или он программирует на языке со смешанной типизацией?

IC
23.07.2018
10:08:47

Александр
23.07.2018
10:09:08
Или он программирует на статически типизированном языке как с а-ля void*?

Алексей
23.07.2018
10:09:36

Yuriy
23.07.2018
10:09:47

Александр
23.07.2018
10:10:30

A64m
23.07.2018
10:10:32

Алексей
23.07.2018
10:11:12


Maxim
23.07.2018
10:12:52
Всем привет, читаю write yourself a scheme, столкнулся с проблемой: решил запилить некое подобие динамической типизации из лиспа, условно говоря, (+ 1 2) == 3, а (+ 1 2.5) == 3.5. Для этого сделал функцию, в которую передаю операцию (например, (*)) и 2 аргумента в виде оберток над значениям. Хочу, чтоб это работало обобщенно, но в итоге получаю ошибку Couldn't match expected type ‘a’ with actual type ‘Integer’ ‘a’ is a rigid type variable bound by. Как можно это исправить? Вот код:
applyOp :: Num a => (a -> a -> a) -> LispVal -> LispVal -> LispVal
applyOp op (LispNumber a) (LispNumber b) = LispNumber (op a b)
applyOp op (LispNumber a) (LispDouble b) = LispDouble (op (fromIntegral a :: Double) b)
applyOp op (LispDouble a) (LispNumber b) = LispDouble (op a (fromIntegral b :: Double))
applyOp op (LispDouble a) (LispDouble b) = LispDouble (op a b)
В LispNumber лежит Integer, в LispDouble - Double

A64m
23.07.2018
10:12:53

Алексей
23.07.2018
10:13:12
а это не проблема

IC
23.07.2018
10:13:29
« the haskell is fine... »

Алексей
23.07.2018
10:14:00
ну точнее для хаскелистов может быть и проблема, но вот для меня нет, потому что я знаю кучу разнообразных языков и могу писать почти на чём угодно

Google

A64m
23.07.2018
10:14:20
так что проблема

Алексей
23.07.2018
10:14:41

Sunny
23.07.2018
10:14:42
ох уж эти фанатики хаскеля

Андрей
23.07.2018
10:14:49
исправить просто - по символу + делай свертку листа интов ор даблов (лиспвал) и возвращай инт ор дабл

Алексей
23.07.2018
10:15:03
кто-то и хаскель назовёт говном потому что у него порог входа неслабый такой

A64m
23.07.2018
10:15:16
так и хаскель говно

Андрей
23.07.2018
10:15:20
скорее потому что не идрис/агда


Yuriy
23.07.2018
10:15:26
Всем привет, читаю write yourself a scheme, столкнулся с проблемой: решил запилить некое подобие динамической типизации из лиспа, условно говоря, (+ 1 2) == 3, а (+ 1 2.5) == 3.5. Для этого сделал функцию, в которую передаю операцию (например, (*)) и 2 аргумента в виде оберток над значениям. Хочу, чтоб это работало обобщенно, но в итоге получаю ошибку Couldn't match expected type ‘a’ with actual type ‘Integer’ ‘a’ is a rigid type variable bound by. Как можно это исправить? Вот код:
applyOp :: Num a => (a -> a -> a) -> LispVal -> LispVal -> LispVal
applyOp op (LispNumber a) (LispNumber b) = LispNumber (op a b)
applyOp op (LispNumber a) (LispDouble b) = LispDouble (op (fromIntegral a :: Double) b)
applyOp op (LispDouble a) (LispNumber b) = LispDouble (op a (fromIntegral b :: Double))
applyOp op (LispDouble a) (LispDouble b) = LispDouble (op a b)
В LispNumber лежит Integer, в LispDouble - Double
когда применяешь applyOp, фиксируется a. оно может быть любым, но только одним во всей функции


A64m
23.07.2018
10:15:35
но там хоть какое-то движение в направлении не совсем говна есть

Admin
ERROR: S client not available

Maxim
23.07.2018
10:16:06

Yuriy
23.07.2018
10:16:08

Maxim
23.07.2018
10:16:18

Leonid
23.07.2018
10:16:20
я вот не понимаю нытьё про порог входа в хаскель. Если я смог, значит не высокий.

Maxim
23.07.2018
10:16:32
юзал NoMonomorphismRestriction

Yuriy
23.07.2018
10:16:44

Алексей
23.07.2018
10:16:49

Maxim
23.07.2018
10:16:49

Андрей
23.07.2018
10:16:51
а что значит “смог”? может это только так кажется?

Google

Yuriy
23.07.2018
10:16:54

Maxim
23.07.2018
10:17:13

Yuriy
23.07.2018
10:17:13

Leonid
23.07.2018
10:17:24

Андрей
23.07.2018
10:17:32
так себе критерий имхо

Yuriy
23.07.2018
10:17:37

Maxim
23.07.2018
10:17:37
это не связано
тогда попробую forall сейчас заюзать, если это не одно и то же

Leonid
23.07.2018
10:17:48

Алексей
23.07.2018
10:17:57

Андрей
23.07.2018
10:18:02
пара диссеров например

Leonid
23.07.2018
10:18:24

Yuriy
23.07.2018
10:18:34
надо уже рассуждения о языках выносить в отдельный чат. здесь вы мешаете практические проблемы решать

Leonid
23.07.2018
10:18:34
или может по плюсам?

Андрей
23.07.2018
10:18:42
вы про хаскель говорили а не про жс и плюсы

Maxim
23.07.2018
10:18:49

A64m
23.07.2018
10:18:51
очень субъективное утверждение
почему? нетипизированные языки - обективно говно. языки без параметрического полиморфизма - объективно говно. языки без вывода типов - объективно говно, языки без контроля эффектов - объективно говно, языки без hkt - объективно говно. строгие языки - объективно говно, языки без классов типов - объективно говно, языки без модулей - объективно говно. языки без проверки тотальности объективно говно. ну что там осталось из неговна? ничего Ж(((

Leonid
23.07.2018
10:19:00
ну всё, у меня подгорело

Yuriy
23.07.2018
10:19:10
кстати @fp_ru — чат, где можно языки обсуждать

Алексей
23.07.2018
10:19:19

A64m
23.07.2018
10:19:25
да

Андрей
23.07.2018
10:19:47
f = const shit
чекер Клапауция

Yuriy
23.07.2018
10:20:17