- *haskell *programming *говноДа, это write-only-язык. Кусочек объявления в where:
nodesMap' = M.map (\ni -> ni { lackingBlocks = lackingBlocks ni ++ map GBlockID (zip [0..(numBlocks $ sesParms $ net st)] (repeat $ curPiece st)) }) (nodesMap st)
Replies (11)
- @PineappleZombie:А нахрена в одну строчку? А data-accessors/fclenses/не_помню зачем выдумали?from 046cb161dc561c982af2a68e371312b8, 11 months ago
- @0xd34df00d:@PineappleZombie Хм. Не в одну форматирование бы сбилось :3 А чочо ты имеешь ввиду?
- @PineappleZombie:@0xd34df00d hackage.haskell.org
дабы не писать \ni -> ni { lackingBlocks = lackingBlocks ni ++ blah blah blah } - @0xd34df00d:@PineappleZombie Ох, не знал. На самом деле, у меня экспа в этом вашем хацкеле нулевая, я до этого только алгоритмики писал всякие няшные и тестил их, и только сейчас дошли руки до чего-то большего.
- @PineappleZombie:@0xd34df00d Я ещё вывел эмпирическое правило, что функция длиннее 5-6 строк (без сигнатуры) скорее всего слишком длинная, и в let/where держать много функций нехорошо — неудобно отлаживать
- @0xd34df00d:@PineappleZombie paste.pocoo.org например.
- @PineappleZombie:@0xd34df00d Ой...
Ну я бы пожалуй писал в do нотации
do — прощай фоматирование
st <- get
let p = sesParms $ net st
if ticks st `mod` msecsForPiece (bitrate p) (pieceSize p) < granularity
then ...
else ...
А doAnnounce может имеет смысл вынести в отдельную функцию
Кстати, GHC не делает common subexpression elimination (AFAIR) - @0xd34df00d:@PineappleZombie Да, так гораздо лучше же, читабельнее. Но менее страшно :(