LINUX.ORG.RU

Уважаемые хаскелисты, покритикуйте код, если не лень.

 


0

2

Вот небольшая (до 400 строк) поделка: https://bitbucket.org/testbb/hint-zmq/src/e7e4ce272545/server.hs?at=default.
В первую очередь интересует стиль, а то иногда терзают сомнения в читаемости.

Ежели кому-то интересно, что именно она делает: серверная часть слушает zmq-сокет и интерпретирует команды с помощью hint.
В качестве которых либо простые выражения (Show =>), либо фильтры над строками, либо импорт модулей. В общем что-то похожее на eddie.



Последнее исправление: testbb (всего исправлений: 1)

Всё правильно, всё в функциональном стиле — ты создал себе проблемы и героически их преодолел.

anonymous
()
Ответ на: комментарий от anonymous

А как можно было не создавать проблем? Если отбросить на мгновение возможность выбрать другой язык.

testbb
() автор топика
Ответ на: комментарий от vertexua

Если бы я знал :) Вся Computer Science только тем и занимается, чтобы дать ответ на этот вопрос.

rand
()
Ответ на: комментарий от qnikst

используй 3тий zmq!

Кстати действительно надо попробовать, а то ассерты (Assertion failed: false (zmq.cpp:304)) иногда валятся, вдруг биндинг кривоват.

Спасибо за ссылки, но вот по-поводу первой:

Indentation level is 2 characters

Вызывает сомнения, понимаю если для отдельных случаев, скажем do-блока.

Do no insert a space after a lamda:

Тоже не понятен мотив, где-то в хаскель-report было что надежнее отделять.

А в обоих:

Imports should be grouped into:

Почему, скажем, local не в начало (вроде в свое приложение встраиваем остально, а не наоборот)?

Avoid over-using point-free style.

Боюсь это есть, но вроде локализованно.

testbb
() автор топика
Ответ на: комментарий от testbb

про стиль, этому стилю следуют такие мелкие фирмы как гугль и подобные, в общем-то если ему следовать - то будет неплохо.

В целом код конятный, хотя я не понял какого, черта process будет работать.

и да - я не специалист, так средненький программист.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

Кстати по второй: Indent your code blocks with 4 spaces ... where clause 2 spaces

такие мелкие фирмы как гугль и подобные

Ок, спасибо. Но именно на хаскель уже более менее четкий снандарт?

какого, черта process будет работать

Эм а почему не должнен? (если что, проверено «экпрементально»:)

testbb
() автор топика
Ответ на: комментарий от vertexua

А как надо чтобы не было проблем?

Писать на Common Lisp, очевидно же.

anonymous
()
Ответ на: комментарий от testbb
process :: EvalQuery -> InterpreterS EvalReply
process query @ EvalQuery {..} = do
  processExtra qExtra
  if null qExpr
     then emptyReply <$ say "no query"

     else say ("received query: " ++ qExpr)
       >> lift (processExpr query)

откуда тут qExtra, и qExpr + какой тип у recvBinary?

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

qExtra, и qExpr

Непортабельные хаки (врочем этот вроде безобидный): {-# LANGUAGE RecordWildCards #-}
при EvalQuery {..} вместо getter-ов имеем в локальной видимости поля (то есть qExtr :: String) аргумента.

какой тип у recvBinary?

А, ну тут же не один файл. Из Utils: recvBinary :: Binary b => Socket a -> IO b
+ instances для Binary в который просто последовательно упаковываются поля.

testbb
() автор топика
Ответ на: комментарий от testbb

непортабельные хаки - зло :)

теперь всё ясно.

qnikst ★★★★★
()
Ответ на: комментарий от aptyp

да, из публичного ganeti, говорят, всякие мелкие внутренние задачи зачастую на нём. Подробностей не знаю, если бы знал то всё равно под NDA были бы :)

qnikst ★★★★★
()
Ответ на: комментарий от s9gf4ult

Там строки сливались, лучше пустой отделять, оставляя «do» рядом с лямбдой?
Просто тогда блок бы смотрелся оторванным.

testbb
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Полнейшая обфускация :)

Куда там, еще есть пространство для маневра, берем, например 50-ую:

listen (ipcUri file) `withLockOn` file ===
withLockOnf ((listen . ipcUri) file) file ===
-- (S - это share: S.xyz = xz(yz))
flip S (listen . ipcUri) file ===
-- ("голый" reader)
(=<<) (listen . ipcUri) file

Строка сократилась больше чем на треть!)

testbb
() автор топика
Ответ на: комментарий от testbb

Ой, withLockOn забыл, ладно, стала длиннее на 1 символ, зато более обфусцированнее на 33 попугая).

(=<<) withLockOn (listen . ipcUri) file

testbb
() автор топика
Ответ на: комментарий от s9gf4ult

Куда там, еще есть пространство для маневра, берем, например 50-ую:

тогда зачем делаешь ?

Боюсь, у вас парсер иронии немного барахлит).

testbb
() автор топика

Из неупомянутого, хоть это и не важно: вокруг '@' в as pattern пробелы обычно не ставят.

fmap
()
Ответ на: комментарий от fmap

В курсе, но тут ведь {..}. И чтобы визуально этот блок не отрывался, тогда желательно было бы добавить и скобки.
А последнего не очень хотелось.

testbb
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.