Котаны, в феврале-январе следующего года надо (лол) отгулять 3-недельный отпуск. Хочу куда-нибудь поехать. Посоветуйте куда. Так же не против возможности попутничества, но свободного. О себе хикка в душе, погроммист, есть кота, linux'ы.
Драйвер редиса возвращает 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")
Вопрос: вам не кажется это "слишком"? Я пока еще не настолько просто манипулирую типами в голове, чтоб ощутить всю ситуацию, хорошо хоть в целом могу медленно прости по шагам по коду, но есть ощущение, что что-то здесь не так.
Сходил вместе с старыми друзьяшками в пэйнтбол. Все по милитари http://i.imgur.com/CLkjY9o.jpg. Но некотрые моменты понравились.
В перерыве между работой и прокрастинацией пытаюсь распаковать прошивку для d-link dir-615 ревизии М1, для которой ddwrt так и не сделали
Пишу тонну factory-бойлерплейта, но понимаю, что читающий может быть слишком шокирован, потому заставляю себя "пока-что-ненужные" вещи писать напрямую. Possible-cultural-misunderstanding-driven development.
Неделя назад. Экзистенциальные кризисы, забухал, поиск девушки за деньги, ДС2, перелом лица @ забрали $, а вчера ЛОРушка дочинил всё. Во вторник снова на быдло-работу. Вопрос (борды 200): есть ли что-нибудь готовое для мониторинга тредов, что бы можно было достать последнюю версию до перехода за стикс?
Не нужно, конечно, но новый папа доставляет http://www.bbc.co.uk/russian/society/2013/09/130919_pope_francis_interview.shtml. Это как браться за рефакторинг того, чего все боятся трогать и продолжают привинчивать костыли.
Обнаружен ЖЖ артемия лебедева: http://tema.livejournal.com/1468670.html#comments
Путен и ОМОН теперь стали символами гей-парадов: http://efa2007.livejournal.com/631534.html
Я тут уже, кажется, писал, что женщины в принципе во многих облатях мыслят рациональнее, чем мужчины. Например в вопросах любви мужчина руководствуется только бурными и неконтролируемыми эмоциями, на которые он совершенно не может повлиять. В то же время женщины действуют по строго просчитанному и рациональному алгоритму: http://ace1962.livejournal.com/1331857.html Есть чему поучиться, ага.
Какой чудный малыш... http://pryf.livejournal.com/3222931.html
Аргументы противников легализации оружия: http://lj.rossia.org/users/boza/583358.html
Комментарии немцев о путене: http://fish12a.livejournal.com/558224.html
Не могли бы русские одолжить нам Путина? Нам в Германии нужны политики с твёрдым характером.
Ну что, русские, как вы? Одолжите? Может быть, от широты русской души и насовсем им подарить, чего для братушек-немцев-то жалеть?