
Yuuri
18.06.2018
17:19:39

Евгений
18.06.2018
18:20:43

Yuuri
18.06.2018
18:21:48
Или spock? Или вообще happstack? ?

Aleksey
18.06.2018
18:23:22
spock норм

Google

Aleksey
18.06.2018
18:23:33
scotty тоже

Евгений
18.06.2018
18:24:06
Хапстек мёртв же

Yuuri
18.06.2018
18:33:36
Что значит мёртв? Не работает и разлагается?

Слава
18.06.2018
18:33:39
(оффтоп)
Я знаю, что это канал про аниме. Что это за тайтл, не подскажете ли?

Евгений
18.06.2018
18:54:34
@t91x0 @flerka Так, молодые люди. Стикеры и картинки тут глубоко не приветствуются

Слава
18.06.2018
18:55:03

Евгений
18.06.2018
18:55:23
Я похож на виабу?

Слава
18.06.2018
18:55:53
Я похож на виабу?
Мало ли. Я знаю одного хаскелиста-трапа, который вышел замуж за скальщика и уехал в ЕС.

Vladimir
18.06.2018
18:56:59
Он штангой занимался?

Слава
18.06.2018
18:58:02

Vladimir
18.06.2018
18:59:50
Зефиров не единственный.

Ilya
18.06.2018
19:00:40
Народ, плиз

Yuuri
18.06.2018
19:03:26

Google

Ilya
18.06.2018
19:06:10
он был женщиной с точностью до изоморфизма

A64m
18.06.2018
19:07:21
> за скальщика
ужасно

Alex
18.06.2018
21:06:22
Так че за аниме было выяснили?

Mikhail
18.06.2018
21:20:03
Long variable names make code's structure harder to see.
Short variable, the reader might forget the intent
Compromise: Use the long name just once.
tax originalAgi marginalTaxRate =
a * r
where
a = originalAgi
r = marginalTaxRate
оно и на реальныe математические выкладки похоже
по-моему годная мысль

Index
18.06.2018
22:46:42
what if
tax (OriginalAgi a) (MarginalTaxRate r) = Tax (a * r)
еще и типы хорошие будут, с ньютайпами
вместо
tax :: Money -> Money -> Money
будет
tax :: OriginalAgi -> MarginalTaxRate -> Tax

Alexander
18.06.2018
22:55:50
> Long variable names make code's structure harder to see
сильное утверждение
не говоря уже о том что tax = (*)
> tax :: Money -> Money -> Money
rate не может быть типа Money изначально, это же рейт :)

Index
19.06.2018
01:03:42
Я не вдумывался в то, что пишу
Пусть будет Coeff или что там

Дмитрий
19.06.2018
01:14:09
Comoney

Alister
19.06.2018
05:51:30

Евгений
19.06.2018
07:20:28

Aleksey
19.06.2018
07:26:49
Типики же есть, зачем "говорящие имена", если типы "говорящие"? Вот если функция выглядит, как (говно):
f :: Int -> Int -> Int -> Int
f x a b = if x > 5 then a else b
то в этом конкретном случае имена аргументов могут помочь. Но не сильно
Тут уже именованные аргументы нужны (как в либе от @int_index, например)

Google

A64m
19.06.2018
07:28:07

Alexander
19.06.2018
07:30:40
Если что то не влезает в экран то его структура говно

Евгений
19.06.2018
07:32:37

A64m
19.06.2018
07:33:16
это новая мода

Alexander
19.06.2018
07:34:07
Это не новая мода, это в хаскель пришли практики
Им некогда возится с однобуквенными переменными, у них релиз

Евгений
19.06.2018
07:35:05
"Практики" means джависты? Я, конечно, не хочу ничего плохого про джавистов сказать, но такая монополизация практики мне не нравится
Потому что в плюсах, например, принято все локальные переменные делать короткими.

Alexander
19.06.2018
07:36:18
Ну я вот не джавист но мнение по переменным у меня "до 20 символов норм, 30 на грани"

A64m
19.06.2018
07:36:28
точно, вместо однобуквенных названий надо названия вроде таких. типТутОченьОбщийНичегоНеПридумываетсяАЧтоДелатьМыЖеПрактикиТакЧтоПРиходится

Alexander
19.06.2018
07:38:11

A64m
19.06.2018
07:38:37
точно a называешь и все

Alexander
19.06.2018
07:38:44
Если тип выразитилен то переменную можно назвать так же и нет проблем

A64m
19.06.2018
07:39:15
ну вот как тип обычно и называют a, b, m, f

Alexander
19.06.2018
07:39:35
Собственно, на этом уровень абстракции в джаве и кончается
ну a b m f это просто соглашение
переменную типа f можно назать functor, какие проблемы?

A64m
19.06.2018
07:41:42
например в том, что это не функтор?

Alexander
19.06.2018
07:41:59
тогда зря ты назвал тип f

Google

A64m
19.06.2018
07:42:23
нет не зря, для него же есть инстанс класса функтор

Alexander
19.06.2018
07:42:35
но он не функтор
интересно
мне уже нравится твой код :)

A64m
19.06.2018
07:45:23
"не понимаю типы, но спешу напрыгнуть на чей-нибудь код"

Alexander
19.06.2018
07:45:58
действительно не понимаю как инстанс класса функтор может не быть функтором
или ты про то что функтор это преобразование а не его результат?

A64m
19.06.2018
07:47:54
не про это

Admin
ERROR: S client not available

Слава
19.06.2018
07:48:44

A64m
19.06.2018
07:48:47
и параметру который принимает инстанс класса функтор вообще не дать имени - он неявный, выше написано "для него есть инстанс класса функтор"

Alexander
19.06.2018
07:49:43

Слава
19.06.2018
07:50:13
Поэтому я не использую однобуквенные переменные, разве что как индексы в циклах

A64m
19.06.2018
07:51:29
в случае баундед полиморфизма говорить, что параметр типа является типом из констейнта есть все основания, его можно скастить к этому типу, но хаскель это не сишарп

Alexander
19.06.2018
07:54:25
> но хаскель это не сишарп
и?
почему вечно всплывают языки которыми на которых я не писал в качестве примера "это делают только там"?

Слава
19.06.2018
07:55:17

Alexander
19.06.2018
07:55:30
потому что у меня нет OS Windows
дорого :(

Google

Слава
19.06.2018
07:55:43

Alexander
19.06.2018
07:55:53
15 лет назад мне было 10

Слава
19.06.2018
07:56:02
А, ок.

Alexander
19.06.2018
07:56:08
я предпочитал C

A64m
19.06.2018
07:56:49
попробую обяснить что тут не так:
вот у нас есть
map :: (a -> b) -> [a] -> [b]
мы в него функцию передаем
назовем ее тип как-нибудь
type Func a b = a -> b
map :: Func a b -> [a] -> [b]
ну вот говорить что a - это Func a b потому что мы можем применить ее к а примерно столько же оснований, что и говорить что f это Functor

Alexander
19.06.2018
07:58:14
ты ведь понимаешь, что если следовать аналогии то первый параметр нужно назвать function?
чем он определенно является

Aleksey
19.06.2018
08:00:08
Зачем дублировать информацию? Чтобы потом путаться, после того как сигнатура поменяется?
Венгерская нотация какая-то

A64m
19.06.2018
08:00:30
тут-то все нормально это же функция. по аналогии с называнием f functor надо называть
a - funcab
map :: Func funcab b -> [funcab] -> [b]
а, нет
map :: Func funcfuncabb b -> [funcfuncabb] -> [a]
а, нет

Alexander
19.06.2018
08:00:40
то есть мы хотим менять сигнатуру не меняя внутрености функции?

Aleksey
19.06.2018
08:00:59
Конечно

A64m
19.06.2018
08:01:04
внутренности то тут причем?

Alexander
19.06.2018
08:01:11
> по аналогии с называнием f functor надо называть
a - funcab
где аналогия то?

Aleksey
19.06.2018
08:01:55
lpcstrzWindowTitle и прочие hwndpnWindowParamName

Слава
19.06.2018
08:02:16

Aleksey
19.06.2018
08:02:16
тоже практики писали

Alexander
19.06.2018
08:02:48
Конечно
мне кажется весьма редкий кейс когда это возможно
я ничего кроме сужение констреинта на уровне типов придумать не могу
ну перестановка аргументов местами очевидно в любом случае делается без правки кишок