← All posts tagged Haskell

qnikst

зопилил тест который запускает explain на все sql запросы, пока не сохраняет в файлик, а только проверяет корректность того, что все отрабатывает. Когда-нибудь когда будет время нужно будет превратить это в source плагин, чтобы ручной работы не было совсем.

qnikst

1. приложение выдает 1к rps и тормозит, как не должно
2. добавляешь в контейнер GHCRTS=-N4
3. приложение выдает 4.5к rps

оптимизация like a boss, а в го бы пришлось вручную память менеджерить.

qnikst

А давайте спецолимпиадку по типам? Есть код codegists.com это Freer для стрелок, но с ним проблема, нужно квадратичное число инстансов, так надо определять Category (Freer Category eff), Category (Freer Arrow eff), несмотря на то, что Category => Arrow. Что очевидно очень печально, и хотелось бы это поправить.

У меня получилось такое:

gist.github.com

Есть чуть более простые варианты но с тоже с квадратичным числом инстансов, хоть и более простых. Так же можно запилить вариант на TH который будет сразу генерить полный instance search, но это читерство.

Принимаются варианты и предложения по улучшению гиста.

qnikst

hPutStr :: Handle -> BL.ByteString -> IO ()
hPutStr hdl lbs = wantWritableHandle "Data.ByteString.Lazy.hPutStr" hdl $ \hdl__ ->
  BL.foldrChunks (go hdl__) (commit hdl__) lbs
 where
  go hdl__ (S.PS ps s l) rest = do
   unless (l == 0) $ withForeignPtr ps $ \p -> do
    _ <- bufWrite hdl__ (p `plusPtr` s) l True
    pure ()
   rest
  commit hdl__ =
   case haBufferMode hdl__ of
    BlockBuffering _   -> do return ()
    _line_or_no_buffering -> do flushWriteBuffer hdl__
                  return ()