← All posts tagged Haskell

IPShuvaev
Haskell friday Не пойму, как в этом friday получить изображение из ByteString/Vector/Ptr. Базовое представление изображения — тип
data Manifest p = Manifest {manifestSize :: !Size, manifestVector :: !(Vector p)}
Что если скастовать Manifest Word8 к Manifest RGBPixel, где
data RGBPixel = RGBPixel {rgbRed :: !Word8, rgbGreen :: !Word8, rgbBlue :: !Word8}
IPShuvaev
Haskell Есть Ptr a, из которого я хочу получить ByteSstring, который потом соберется сборщиком мусора. Верно ли, что мне достаточно для этого воспользоваться функцией unsafePackMallocCString и не беспокоиться о ручном освобождении памяти? Как-то так?
mkStr f len = allocaBytes len \p -> unsafePackMallocCString (p, len)
IPShuvaev
Haskell После безуспешных попыток захвата изображения с веб-камеры на джаве, сделал это на хаскеле. Оказалось быстрее пофиксить проблему в хэкедж пакете, чем заставить работать jmf. Странно это.
IPShuvaev
Java Haskell Чем мне нравится java, так это тем, что не нужно дополнительно устанавливать сторонние библиотеки. Все, что требуется (dll, so, etc) уже включено в библиотеку. У хаскелла постоянно приходиться возиться с установкой сишных либ. Все дело в лицензиях?
IPShuvaev
Haskell хочется_странного Допустим, есть код типа

let go = do {s <- getLine; if True then return () else putStrLn s}

Очевидно, при каждом вызове go необходим ввод пользователя, хотя в дальнейшем он и не используется. Хочется отложить выполнение getLine до того момента, как реально потребуется значение s. Попытка использовать unsafePerformIO привела к неожиданному для меня результату:

:m System.IO.Unsafe
let go = let s = unsafePerformIO getLine in if False then return () else putStrLn s
go
1
1
go1

Вопрос, как быть в первом случае и почему getLine во втором примере вызывается лишь один раз при нескольких вызовах?
IPShuvaev
Haskell Благородные доны, поясните, как можно использовать функции модуля Data.Vector.Generic для мутабельного вектора из Data.Vector.Mutable?
Например, у меня есть вектор типа
(Data.Vector.Mutable.MVector RealWorld Double). Мне нужно применить к этому вектору функцию Data.Vector.Generic.all. Каким образом это сделать?
IPShuvaev
Haskell С одной стороны так привыкаешь к авто-каррингу в хаскеле, что его отсутствие в языке L считаешь упущением. map (+1) — любо-дорого посмотреть. С другой стороны, функции вида
```
delay :: a -> Signal a -> SignalGen (Signal a)
delay x0 s t_start t_sample | t_start < t_sample = s (t_sample-1)
```
до сих пор вводят в ступор на некоторое время, отнимая немало времени на их дешифровку — откуда берутся доп. аргументы, каким образом что разворачивается, где что применяется и т.д. Наверно, нужно больше практики, чтобы сформировать шаблоны подобного рода и читать этот код, не теряя нить логики.
IPShuvaev
Haskell Как в хаскеле быстро разбить файл на два, меньших по размеру? И почему подобный код калечит содержимое / медленно работает (разбиение 16ГБ выполняет минут 15). lpaste.net
IPShuvaev
Haskell Написал параллельную сортировку Шелла с использованием мутабельного массива. Миллион случайных чисел сортируется долгих 6 секунд. Стандартная функция Data.List.sort на этих же данных отрабатывает за 5 сек. Понятно, что Data.List.sort работает с небыстрым списком и скорости ждать не стоит.
Однако, сложность параллельной сортировки Шелла похожа на n log n, поэтому подозрение, что текущий вариант можно здорово ускорить. Непонятно лишь, как. Для сравнения, стандартная сортировка в java обрабатывает 10 млн чисел за 2 сек.
Код программы — lpaste.net
IPShuvaev
Haskell scotty Как работать в Scotty с куками? Из коробки он в них не умеет. В пакете scotty-cookie функция setSimpleCookie перезаписывает предыдущую куку. Пакет cookie неудобен. Писать хедер руками не хочется
IPShuvaev
code Haskell
Кто работал с BlazeHtml, подскажите, как нормально работать с аттрибутами? Писать value (textValue $ T.pack $ show count) ?.