juan_gandhi: (VP)
[personal profile] juan_gandhi
presentation: http://2013.flatmap.no/blakstad.html
unfiltered library: https://github.com/unfiltered/unfiltered/blob/master/directives/README.markdown

So, the idea is, have all this http run monadic; that includes checking conditions and throwing back all those 404s, 451, 500...

Date: 2014-03-08 11:22 am (UTC)
From: [identity profile] mikkim08.livejournal.com
Спасибо, очень интересно. Я тоже хочу писать как-нибудь вот так. Но есть вопросы:

Как я понял:

1) Result он что-то вроде Either. Это монадная обёртка для результат вычисления. Success это обёртка для успешно вычисленого значения, а Failure -- для кода ошибки.

2) Directive это монадная обёртка для функции HttpRequest => Result, похожая на монаду Reader.

Примеры Directives:

request = req:HttpRequest => Success(req)
method = request(req).map(_.method)
inputStream = request(req).map(_.inputStream)
и т.д.

Благодаря тому, что Result это монада, эти самые функции-"директивы" (Directive) можно "композировать" с помощью >=> , и это хорошо.

Теперь вопросы:

- Зачем нужно придумывать специальную монаду Result, если уже есть Either ?
- С какой целью Directive сам сделан монадой ?
- Если Directive это монада, то почему не использовать монаду Reader ?
Edited Date: 2014-03-08 11:45 am (UTC)

Date: 2014-03-08 04:16 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Я пробовал Either, но с ней как-то странно, она слишком симметрична; какая разница - левое, правое. А тут - как монада Exception.

Про Directive ничего не скажу, надо разбираться.

Date: 2014-03-08 06:28 pm (UTC)
From: [identity profile] mikkim08.livejournal.com
Да, с Either не очень удобно. Может, в scalaz есть другой, более удобный, вариант ? Надо будет посмотреть. Но так или иначе, general-purpose Result в узкоспециальной библиотеке мне как-то не очень.

Про директивы есть другое видео : http://2013.flatmap.no/teigen.html

(может, с'ездить в мае на эту конференцию ? регистрация 2К стоит)
Edited Date: 2014-03-08 06:29 pm (UTC)

Date: 2014-03-08 09:58 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
В скалазеде есть Validation, но она непрактична.

Date: 2014-03-09 03:12 pm (UTC)
From: [identity profile] mikkim08.livejournal.com
Может scala.util.Try тогда ? Хоть он и не монада. Я сейчас посмотрел, у нас пишут в таком стиле:
val handle: Response => Try[Value] = { resp =>
  ...
  for {
     - <- isOk(resp)  // returns Try
     - <- isJSON(resp) // returns Try
     result <- getResult(resp)
  } yield result
}
Edited Date: 2014-03-09 03:16 pm (UTC)

Date: 2014-03-09 04:54 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да, вот и я так хочу писать.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

May 2025

S M T W T F S
    1 2 3
456 7 8 9 10
11 121314151617
181920 21 222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 10:48 am
Powered by Dreamwidth Studios