Имбирь - твой спиритический овощ. Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1245.0 пользователей не могут ошибаться!
?6963
прекрасное6453
говно5915
говнорашка5512
хуита4735
anime3074
linux2661
music2640
bnw2607
рашка2582
log2372
ололо2230
дунч1868
pic1816
сталирасты1493
быдло1440
украина1439
bnw_ppl1431
дыбр1239
гімно1158

Как в этом языке позвать pgrep?
*System.Posix.POpen> popen "pgrep" ["firefox"] Nothing
Loading package filepath-1.3.0.1 ... linking ... done.
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package old-locale-1.0.0.5 ... linking ... done.
Loading package time-1.4.0.1 ... linking ... done.
Loading package bytestring-0.10.0.2 ... linking ... done.
Loading package unix-2.6.0.1 ... linking ... done.
Loading package directory-1.2.0.1 ... linking ... done.
l29ahZl29ah-t60 ~/.xmonad ‰

#UOY1A0 (1) / @l29ah / 4300 дней назад

Зачем нужен haskell, если есть Mathematica?

#964KNH (12) / @ninesigns / 4301 день назад

Победил HXT, вынув из XML'ек условия задач для рассчётки. Всё ещё не понимаю, как может стрелка иметь тип ArrowXml a => a XmlTree XmlTree и при этом возвращать не одно значние, а несколько. Не понимаю, как это всё разветвляется и сливается обратно без необходимости делать map и concat. Аргх.

--Minoru, который думал, что он понял стрелки

#N9BR4J (4+1) / @minoru / 4324 дня назад

Драйвер редиса возвращает Redis (Either Reply a). При операции HGET возвращает, соответственно, Redis (Either Reply (Maybe ByteString)), типа значения по ключу может и не быть. Программист для упрощения пишет сначала специальную функцию redis', которая заворачивает ответ редиса в EitherT-based монаду, чтоб соединять подобные вычисления и возвращать первую неудачу:

newtype Redis' a = Redis' (EitherT Redis.Reply Redis.Redis a) deriving (MonadIO)
instance Monad Redis' where
    return = Redis' . EitherT . return . Right
    (Redis' m) >>= f = Redis' $ m >>= \rv -> unwrapRedis' $ f rv
redis' = Redis' . EitherT

Таким образом, теперь, если вы получаете ответ Redis (Either Reply a), вы его преобразуете в

Redis' (EitherT Reply Redis a)

и можете соединять подобные вычисления в do-блоке типа:

do
    res <- redis' $ Redis.hget foo bar
    res2 <- redis' $ Redis.hget baz zab

и вычисление остановится на первом возврате ошибки.

Далее. Программисту необходимо по кучке значений сделать HGET и вернуть это как-то внутри кортежа, поскольку мы внутри новой монады Redis' -- завернуть результат в неё. В случае, если значения хоть по одному ключу не существует, хочется вернуть Nothing для всех. Потому создаётся новая монада:

newtype HashFields a = HashFields (MaybeT Redis' a)
    deriving (Functor, Monad)
instance Applicative HashFields where
    pure = return
    (<*>) = ap

описывающая вычисления типа Redis', которые могут вернуть неудачу. Пишется новая функция

hashField = HashFields . MaybeT . redis'

способная завернуть результат неудачи в новую монаду, которая умеет останавливаться на первой неудаче. Также пишется специальная функция для HGET:

getField :: ByteString -- ^ Key
         -> ByteString -- ^ Hash field name
         -> HashFields String
getField key field = fmap toString $ hashField $ Redis.hget key field

Также напишем функцию, которая "запустит" наше вычисление:

getRedisFields :: forall a. HashFields a -> Redis' (Maybe a)
getRedisFields (HashFields f) = runMaybeT f

И теперь лёгким движением руки мы можем сделать что-то вроде:

getRedisFields ((,,,,,) <$>
    getField k "foo" <*>
    getField k "bar" <*>
    getField k "baz" <*>
    getField k "zab" <*>
    getField k "rab" <*>
    getField k "oof")

Вопрос: вам не кажется это "слишком"? Я пока еще не настолько просто манипулирую типами в голове, чтоб ощутить всю ситуацию, хорошо хоть в целом могу медленно прости по шагам по коду, но есть ощущение, что что-то здесь не так.

#DEENSA (6+1) / @kb / 4328 дней назад

Какая XMPP-либа нынче наиболее пригодна для реализации XMPP-based протокола (Infinote)?

#87JCZ9 (16) / @l29ah / 4334 дня назад

[22:29:29]<L29Ah_> haskell way: библиотек нет, а те, что есть, сделаны в трёх несовместимых инкарнациях
[22:30:16]<L29Ah_> какой в платформе сорт кондуитов и линз?
[22:30:44]<qnikst> никакого
[22:30:51]<qnikst> и не будет

#56T1W8 (0) / @l29ah / 4338 дней назад

Опубликовал мюслекалькулятор: https://github.com/l29ah/muesli
Patches are welcome!

#LE1G2R (1) / @l29ah / 4381 день назад

А поясните мне за песочницы: разве они не должны наследовать пакеты, установленные в системе и у пользователя?

Я почему спрашиваю: pandoc-1.9.4.5 не собирается в sandbox (похоже, там кто-то захардкодил пути и sh не может найти какой-то файл), так что я поставил его под юзером (то есть в ~/.cabal). Но после того, как я делаю cabal sandbox init, cabal list pandoc утверждает, что установленных версий pandoc нет. Я что-то делаю не так, или я чего-то не так понял?

#LJI5CA (0) / @minoru / 4382 дня назад

Как на хаскеле создать DSL, если haskell не умеет в расширение и изменения синтаксиса языка? Поясните по хардкору.

#XKU4NT (1) / @ninesigns / 4398 дней назад

Считаете, что монадные трансформеры это сложно?

Попробуйте разобраться с syntax model в racket!

#YDNPWW (0) / @ninesigns / 4409 дней назад

Нас было 7 человек. У нас было 20 модулей на хаскеле, приватный репозиторий на гитхабе, 6 веток в этом репозитории, ImplicitParams, MagicHash и UndecidableInstances в коде и одна highmem нода на амазоне, а также hangouts для общения, юнит-тесты, просто тесты, google docs для заметок и куча статей про SMT-солверы.

#SGNR99 (0) / @ninesigns / 4411 дней назад

$ torify cabal update
Downloading the latest package list from hackage.haskell.org
Segmentation fault

#RE0I13 (0) / @ninesigns / 4414 дней назад

Кстати, надо бы наверное сделать специальный обфускатор для хаскеля. Работать он будет так:

  1. сперва пишем обычный, нормальный код.

  2. автоматически заменяем все имена на бессмысленные f, g, x etc.

  3. у нас получается некоторое дерево вызовов, проводим замену его поддеревьев по определенным rewriting rules, например дерево (f x) на f $ x, f (g x) на (f . g) x, то что сделал ты с f $ g <*> h и т.п., потом проводит «депоинтизацию», убирая где можно аргументы.

Ну то есть делаем то, что сделал ты. Только автоматически. И с этого моменты хаскелисты перестают быть нужными — т.к. весь их арт оказывается легко и непринужденно может быть исполнен автоматическим обфускатором.

ЗЫ: обрати внимание на первый пункт — получить обфусцированный код можно только тогда, когда нормальный код уже есть. Это к слову о любителях ненужной работы.

#2IKVRF (0) / @ninesigns / 4415 дней назад

ghc doesn't fuse lists (avoiding success at all costs?)

http://stackoverflow.com/a/17345377/2350060

#4XPJQ8 (0) / @minoru / 4450 дней назад

https://research.microsoft.com/en-us/um/people/simonpj/papers/ndp/haskell-beats-C.pdf

Abstract
Stream fusion [6] is a powerful technique for automatically transforming high-level sequence-processing functions into efficient implementations. It has been used to great effect in Haskell libraries for manipulating byte arrays, Unicode text, and unboxed vectors. However, some operations, like vector append, still do not perform well within the standard stream fusion framework. Others, like SIMD computation using the SSE and AVX instructions available on modern x86 chips, do not seem to fit in the framework at all.
In this paper we introduce generalized stream fusion, which solves these issues. The key insight is to bundle together multiple stream representations, each tuned for a particular class of stream consumer. We also describe a stream representation suited for ef ficient computation with SSE instructions. Our ideas are implemented in modified versions of the GHC compiler and vector library. Benchmarks show that high-level Haskell code written using our compiler and libraries can produce code that is faster than both compiler- and hand-vectorized C.

На ассемблере такие вещи надо делать. Алсо, тут http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=gcc&lang2=ghc&data=u64q хаскель сливает сишке почти по всем пунктам. И я бы не сказал, что кода на х-е сильно меньше, чем кода на Си

#BAHBZO (7) / @j123123 / 4453 дня назад

сами хаскелеры как правило охуенные программисты, выбравшие хаскель по ряду причин, проработав и на других языках и зная разницу (как, вобщемто и я) между хаскелем и не хаскелем.

#II3PTB (2) / @ninesigns / 4488 дней назад

Товарищи, я тут в жуйках итд вижу много вопросов по хаскелю, как разрулить ту или иную проблему итд.

Так это, хаскеллисты, расскажите над какими проектами вы вообще работаете?

#LVSV7G (17+1) / @ninesigns / 4499 дней назад

Ну чо, кто готов?

A solid background in computer science, documented experience and/or strong academic education in advanced functional programming in Haskell are assumed. Knowledge of type systems, Martin-Löf type theory, dependent types, formal methods, static analysis, MSR Code Contracts, hardware verification, HDLs, Spec#, Coq, Agda, Idris, Epigram, Twelf or other similar tools, languages, theorem provers is desirable but not required. Knowledge of parsing, skills also in other programming languages including experience from C, C#, C++, Objective-C and also Scala, is also desirable but not required. Higher academic degrees such as a PhD in computer science are not required but certainly taken into account. Entrepreneurship skills or industrial experience is not required here – but if such exists it is considered to be a strong merit as well. Knowledge in UNIX and Linux is required. Finally, experience from using Visual Studio, Eclipse or other IDEs is relevant.

#6600NK (1) / @ninesigns / 4505 дней назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.