
A64m
19.04.2018
07:09:28

Denis
19.04.2018
07:09:32
Это не вопрос объективной оценки, это по принципу "если ты захочешь придраться - ты всегда найдёшь, к чему..."

Yuriy
19.04.2018
07:10:38

A64m
19.04.2018
07:11:15
ну, это не репортовый хаскель, а реально существующий. Другого у них для нас нет

Google

Denis
19.04.2018
07:11:18
> head is a partial function and is still in the prelude
так это вопрос не к Хаскелю, а к конкретной реализации Prelude. В конце концов, есть и другие варианты Прелюдии, без partial-функций

A64m
19.04.2018
07:12:56

Denis
19.04.2018
07:13:26
смешных для кого?

A64m
19.04.2018
07:13:35
для меня

Denis
19.04.2018
07:13:45
для меня тоже
но для многих это не так
Это выходит как в той шутке: "Я слышал, сосед на своём Мерседесе вчера в аварию попал. Ну вот я и говорю - говно эти ваши Мерседесы"

Alexander
19.04.2018
07:14:10
а прелюдии в которых вместо частичных функций призмы уже есть?

Yuriy
19.04.2018
07:14:28
мне не смешно от частичных литералов. правда, я не слышал, чтобы от них кто пострадал

Alexander
19.04.2018
07:14:31
просто прелюдия без частичных функций это как-то странно, что-ли

Denis
19.04.2018
07:14:49
но такие есть

A64m
19.04.2018
07:14:50
ну и эта претензия больше про :: вместо :

Alexander
19.04.2018
07:15:14
то, что они есть, это не говорит, что это что-то хорошее

Google

Denis
19.04.2018
07:15:31
как знать...

A64m
19.04.2018
07:15:50
это как "главный недостаток гитлера - смешные усы"

Denis
19.04.2018
07:16:25
@qnikst Я, напротив, слышал от многих практикующих хаскелистов, что дефолтная Prelude - это мрак и ужас...
но я не даю этому оценки, просто многие так говорят

Alexander
19.04.2018
07:16:44
наличие чего-либо не является гарантией качества и правильности, вот это совершенно точно
но недефолтные не сильно лучше

Dmitry
19.04.2018
07:18:55

Yuriy
19.04.2018
07:19:30
Nitpicks - HaskellWiki
https://wiki.haskell.org/Nitpicks

Dmitry
19.04.2018
07:20:00
Опять всё изобретено до нас :(

A64m
19.04.2018
07:20:17

Alexander
19.04.2018
07:27:08
а альтернативных прелюдах обычно решают пару проблем, хорошо ещё если адекватным способом

kana
19.04.2018
07:27:33
Твар не зависит от мвар
Твар - враппер над иорефом

andretshurotshka?❄️кде
19.04.2018
07:27:50
трваь

Denis
19.04.2018
07:28:05

Oleg
19.04.2018
07:29:26
Ну тогда тварь точно не линейно больше мвари

Alexander
19.04.2018
07:29:27
тварь это базовый примитив ртс

Google

Denis
19.04.2018
07:30:14

kana
19.04.2018
07:30:15
?

Oleg
19.04.2018
07:30:33

kana
19.04.2018
07:31:05
В стм твар явно определен как ньютайп поверх ioref
Если там какая-то шутка, я то я ее не понял

Alexander
19.04.2018
07:31:46
не определен

Denis
19.04.2018
07:33:04

Alexander
19.04.2018
07:34:59
-- |Shared memory locations that support atomic memory transactions. data TVar a = TVar (TVar# RealWorld a)
и никогда не мог быть определен как ньютайп

kana
19.04.2018
07:37:20
Так бля да, это я перепутал с STM

Denis
19.04.2018
07:37:33
вон в пурсе вообще ничего нет кроме AVar
https://github.com/slamdata/purescript-aff#avars

Denis
19.04.2018
07:37:39
newtype STM a = STM (IORef (IO ()) -> IO a)

Oleg
19.04.2018
07:40:38

Aleksey
19.04.2018
07:41:11
И его сейчас поругают
Кана, убери мат быстрее

kana
19.04.2018
07:41:52
Нет

Dmitry
19.04.2018
07:55:03
Вот один так тоже отказывался правила выполнять, и теперь полинтернета поломалось

A64m
19.04.2018
07:56:55
ПОЛОМАЛОСЬ (ВИДИМО САМО)

Shorty(Ale Chapa) Manskiy
19.04.2018
07:59:51
Вот фатальный недостаток Haskell:
Есть ключевое слово where которое поднимает языка на десять порядков выше чем он был-бы без него.
Но не смотря на все удобства where, код становится сложно тестировать, ведь такие функции отдельно не проверишь.
(я плохо знаю Haskell, т.к. всего лишь прочитал пару глав RWH, и по несколько глав из других книг, пока выбирал ту по которой учить язык.)

A64m
19.04.2018
08:01:31
заходите отладчиком и проверяете

Shorty(Ale Chapa) Manskiy
19.04.2018
08:03:29
автоматизировать это можно? если нет или сильно сложно, то они "не тестируются".

Google

A64m
19.04.2018
08:04:03
доктестом можно, наверное. (не проверял)

Dmitry
19.04.2018
08:04:05
В where-блоке просто не надо писать большие функции, которые ты не можешь "глазами" проверить.

Shorty(Ale Chapa) Manskiy
19.04.2018
08:04:32
согласен, но у меня больше лесенки получаются.
т.е. функции все маленькие, но та функция что на верху, делает слишком много.
т.е. она не делает слишком много, она применяет пару функций, которые применяют пару функций, которые ...

kana
19.04.2018
08:09:22
Так может имеет смысл такие функции поднять на топлевел?
В where я держу только то, что без топлевел значения смысла не имеет
Например go)

Shorty(Ale Chapa) Manskiy
19.04.2018
08:10:10

kana
19.04.2018
08:11:39
Спорно

Admin
ERROR: S client not available

Shorty(Ale Chapa) Manskiy
19.04.2018
08:13:03
Спорно
зачем повышать до "настоящей" функции то, что нигде не используется кроме одной функции?

kana
19.04.2018
08:13:23
f x = g x
where
g x = h x
f x = g x
g x = h x
Если g имеет смысл вне f, то вполне логично его вынести

Shorty(Ale Chapa) Manskiy
19.04.2018
08:14:17
читаемость наоборот ухудшается.

kana
19.04.2018
08:16:32
Ну это субъективно, прочитать 3 простых однострочника с сигнатурой мне проще, чем один многострочный лесенкой комбайн

Shorty(Ale Chapa) Manskiy
19.04.2018
08:19:01
я так и знал, что это фатальный недостаток.
Очень долго думал, как это исправить.
"С силой приходит ответственность".

A64m
19.04.2018
08:21:16
сложнее, три однострочника с сигнатурами все читаются, а иерархическая структура позволяет не читать то, что не надо, пока не разбираешься в конкретных деталях
если все функции топлевелные - трудно понять что можно не читать

Shorty(Ale Chapa) Manskiy
19.04.2018
08:22:07
+

Google

Андрей
19.04.2018
08:22:48
+. но можно оттестировать их на верхнем уровне а потом засунуть в where

Ilya
19.04.2018
08:23:08

Shorty(Ale Chapa) Manskiy
19.04.2018
08:23:55

Ilya
19.04.2018
08:24:48

Shorty(Ale Chapa) Manskiy
19.04.2018
08:25:11
когда тест не пройдет, что будешь делать?

Aleksey
19.04.2018
08:25:19
функции во where ещё и параметры надфункции могут замыкать, так что их и читать может быть непросто и выносить тоже

A64m
19.04.2018
08:26:22
да даже не "могут замыкать", а почти всегда и замыкают

Aleksey
19.04.2018
08:30:59
Почти всегда, да. Но иногда встречается код вида
foo x y z =
...
bar x -- всегда вызывается с x
...
where
bar a = ...

Ilya
19.04.2018
08:31:33

Shorty(Ale Chapa) Manskiy
19.04.2018
08:32:13
правильно, пойдешь отлаживать. А так, сразу бы пошел править сломаную функцию.
т.е. ее не пришлось бы искать.

Ilya
19.04.2018
08:33:09
Предлагаешь писать тесты на каждую вспомогательную функцию?
*юнит-тесты

Shorty(Ale Chapa) Manskiy
19.04.2018
08:33:42
я бы так и делал. если бы можно было.
Тесты модулей нужны для того, чтобы автоматом проверять разные части программы\библиотеки. А такие функции тоже чатсть системы.

Ilya
19.04.2018
08:37:33
Так и каждую лямбду тогда в топ-левел выносить надо
Давать ей имя, и покрывать тестами

Shorty(Ale Chapa) Manskiy
19.04.2018
08:38:30
Об этом я и говорю. Что это — фатальный недостаток.

Ilya
19.04.2018
08:39:19

Shorty(Ale Chapa) Manskiy
19.04.2018
08:40:50
я незнаю других языков, в которыз есть что-то на подобии where.

Ilya
19.04.2018
08:41:15

Shorty(Ale Chapa) Manskiy
19.04.2018
08:41:37
а что там в питоне?

Ilya
19.04.2018
08:42:00
Можно объявлять функции внутри других функций