kb
16.03.2013 09:47
Хотел написать письмо Daan Leijen чтоб сделал хоть какое-нибудь коммьюнити для Parsec (а то документация, во-первых, скудная, во-вторых устаревает), а его единственный контактный имейл университетский уже не работает. На страничке http://research.microsoft.com/en-us/peop... тоже не видно.
kb
01.03.2013 08:20
1. оказывается, х-ль умеет multiline-строки в виде:
a = "foo\
\ bar \
\ baz"
(слэш на новой строке указывает, где она начинается, чтоб можно было выравнивать это безобразие)
2. emacs при этом немного ломается, потому я уж лучше вернусь к "foo" ++ "bar" пока.
kb
25.02.2013 16:53
А если серьезно, никто не подскажет как нормально сделать в quickCheck аналог assertEquals? Чтоб красиво diff печатал (можно как-то совсем по-умному, конечно).
kb
08.02.2013 05:42
Подскажите, пожалуйста. А не существует ли, случаем, библиотеки, подобной регулярным выражениям, но работающей не для строк, а для произвольных данных? То есть, у меня есть список каких-то собственных сущностей, а мне необходимо делать матчинг в стиле регексов, где каждый из символов — моя сущность. То есть, ... more →
kb
07.02.2013 16:35
Сделал вот такой тип (синоним), всё было очень красиво:
type OptionsBlockBounds = (Int, Int)
Далее хотел написать функцию сравнения (объявить инстансом тайпкласса Ord). Я правильно понимаю, что единственный выход — делать вместо type newtype и перелопатить весь код (чтоб заворачивать / разворачивать в ... more →
kb
04.02.2013 06:31
Забавно, как ленивость не вошла в мозг даже авторам realworldhaskell.
> Note, though, that the chain is not completely short-circuited. Each (>>=) or (>>) in the chain will still match a Nothing on its left, and produce a Nothing on its right, all the way to the end. It's easy to forget this point: when a ... more →
kb
31.01.2013 06:31
Подскажите, пожалуйста, можно ли где-то найти книгу Окасаки (Chris Okasaki — Purely Functional Data Structures) в удобном для чтения, скажем, на андроид-таблетке виде? Или объясните различие между тезисом и книгой, заключается ли оно только в последних нескольких главах, или основной материал тоже.
Нашёл в ... more →
kb
23.01.2013 05:15
Кажется, ixset мне не подходит по памяти (как минимум), буду на нормальную БД пересаживаться. Может вернусь посмотреть на них когда научусь нормально профилировать. https://gist.github.com/4602235
kb
22.01.2013 14:16
(modify-syntax-entry ?_ "_" haskell-mode-syntax-table)
kb
15.01.2013 06:18
На предыдущий вопрос ответ, наверное, в использовании функций по типу getOne http://hackage.haskell.org/packages/arch...
Но мне кажется глупым, что люди объявляют новый тип являющийся списком, а потом определяют операции, по сути дублирующие операции со списком. Хотя ... more →
kb
15.01.2013 06:03
Есть такой тип http://hackage.haskell.org/packages/arch... Это типа как результат выборки из БД. Мне нужно получить первый результат из него. Как это сделать?
То есть, есть ли в перечисленных какой-то typeclass, который дал бы возможность сделать что-то вроде (fst ... more →
kb
20.12.2012 17:50
Поставил локальный hoogle => сэкономил много чайников гугловской электроэнергии.
kb
03.12.2012 10:49
Дочитал learnyouahaskell, очень, всё же, крутая книга. Теперь можно смело идти читать realworldhaskell про всякие json-парсеры простенькие, на этот раз, думаю, чтение будет гораздо быстрее.
kb
27.11.2012 09:15
А еще в очередной раз убедился, что автор http://learnyouahaskell.com — очень талантливый человек. Как ни читаю что-то другое, сразу в сравнении это познаю.
kb
21.11.2012 06:46
Как-то я не понимаю, как я должен был догадаться о чем ошибка в подобном примере (показан тип, затем правильный пример, затем неправильный).
Prelude> :t ([3,4,5] >>=)
([3,4,5] >>=) :: Num a => (a → [b]) → [b]
Prelude> [3,4,5] >>= \x → [x,-x]
[3,-3,4,-4,5,-5]
Prelude> [3,4,5] >>= \x → ... more →
kb
12.11.2012 15:49
Как понять, где находится определение instance Applicative ((→) r) ?
kb
17.10.2012 13:40
Ну, то есть, чтоб быть более конкретным. Вот этот код поиска по ключу в списке вида [("key1", "val1"), ("key2", "val2")]
findKey :: (Eq k) => k → [(k,v)] → Maybe v
findKey key = foldr (\(k,v) acc → if key == k then Just v else acc) Nothing
Будет работать эффективно (если вы будете делать findKey key1, то ... more →
kb
17.10.2012 13:30
Да уж, ленивость окончательно запутывает и так непростую ситуацию с foldl и foldr. Приходится ломать мозги.
Получается, что, в классическом варианте, когда вы проходите по всему списку, то (по возможности) лучше использовать foldl', т.к. хвостовая рекурсия и всё такое.
С другой стороны, в виду ленивости, foldr ... more →
kb
03.10.2012 13:48
Решил бросить real world haskell и начать learn you haskell for great good. Пока вторая глава, пока что эта книга кажется еще хуже :(
kb
31.08.2012 09:43
Решил слегка помучать себя. Подскажите, насколько ужасно я всё сделал?
Задача — написать функцию splitWith, которая будет делать примерно что и words, только для произвольных списков. То есть по предикату разбивает список. Типа такого:
*Main> splitWith odd [1,2,3,4,5,6,6,6,8,9]
[[2],[4],[6,6,6,8]]
*Main> ... more →
kb
03.08.2012 14:15
Вот, казалось бы, простая функция для вывода главной сущности, а сколько сайд-эффектов различных при юнит-тестировании http://screencloud.net/v/bL3M
В связи с этим вопрос, кстати, по всем этих вашим Хаскелям. При тестировании некоторого юнита хорошо бы как минимум быть уверенным, что ты заменил на моки / стабы все ... more →
kb
24.07.2012 07:43
Ну вот не понимаю. Очередная статься, очередная логика: хаскель — функциональный язык => нельзя поменять значение переменной => результат функции зависит только от её параметров.
а что, блять, прочитать что-то из базы данных хаскель не умеет?
http://learnyouahaskell.com/input-and-ou...