Skip to content

Commit 19ce988

Browse files
authored
Improve indent for scalaz.scala (#648)
1 parent 43e14fb commit 19ce988

File tree

1 file changed

+92
-105
lines changed
  • domains-scalaz/src/main/scala/com/thoughtworks/dsl/domains

1 file changed

+92
-105
lines changed

domains-scalaz/src/main/scala/com/thoughtworks/dsl/domains/scalaz.scala

+92-105
Original file line numberDiff line numberDiff line change
@@ -16,116 +16,103 @@ import scala.util.control.NonFatal
1616
* support [[scalaz.Bind]], [[scalaz.MonadError]] and [[scalaz.MonadTrans]].
1717
*
1818
* @example
19-
* [[scalaz.Free.Trampoline]] is a monadic data type that performs tail call
19+
* [[scalaz.Free#Trampoline]] is a monadic data type that performs tail call
2020
* optimization. It can be built from a `@[[Dsl.reset reset]]` code block
2121
* within some [[Dsl.Keyword#unary_$bang !-notation]], similar to the
2222
* [[com.thoughtworks.each.Monadic.EachOps#each each]] method in
2323
* [[https://github.com/ThoughtWorksInc/each ThoughtWorks Each]].
24-
*
25-
* {{{
26-
* import _root_.scalaz.Trampoline
27-
* import _root_.scalaz.Free.Trampoline
28-
* import com.thoughtworks.dsl.keywords.Monadic
29-
* import com.thoughtworks.dsl.domains.scalaz.given
30-
* import com.thoughtworks.dsl.macros.Reset.Default.reset
31-
* import com.thoughtworks.dsl.keywords.Monadic.unary_!
32-
*
33-
* val trampoline3 = Trampoline.done(3)
34-
*
35-
* def dslSquare = reset(Trampoline.delay {
36-
* s"This string is produced by a trampoline: ${!trampoline3 * !trampoline3}"
37-
* })
38-
*
39-
* dslSquare.run should be("This string is produced by a trampoline: 9")
40-
* }}}
41-
*
42-
* `!trampoline3` is a shortcut of `!Monadic(trampoline3)`, enabled by `import
43-
* com.thoughtworks.dsl.keywords.Monadic.given`, which will be converted to
44-
* `flatMap` calls by our DSL interpreter. Thus, the method `dslSquare` is
45-
* equivalent to the following code in [[scalaz.syntax]]:
46-
*
47-
* {{{
48-
*
49-
* def scalazSyntaxSquare = trampoline3.flatMap { tmp1 =>
50-
* trampoline3.flatMap { tmp2 =>
51-
* Trampoline.delay {
52-
* s"This string is produced by a trampoline: ${tmp1 * tmp2}"
53-
* }
54-
* }
55-
* }
56-
*
57-
* scalazSyntaxSquare.run should be("This string is produced by a trampoline: 9")
58-
* }}}
59-
*
60-
* <hr/>
61-
*
62-
* A `@[[Dsl.reset reset]]` code block can contain `try` / `catch` / `finally`
63-
* if the monadic data type supports [[scalaz.MonadError]].
64-
*
65-
* [[https://github.com/ThoughtWorksInc/tryt.scala tryt.scala]] is a monad
66-
* transformer that provides [[scalaz.MonadError]], therefore `try` / `catch` /
67-
* `finally` expressions can be used inside a `@[[Dsl.reset reset]]` code block
68-
* whose return type is `TryT[Trampoline, ?]`.
69-
*
70-
* {{{
71-
* import com.thoughtworks.tryt.invariant.TryT, TryT.given
72-
* import scala.util.{Try, Success}
73-
* type TryTTransfomredTrampoline[A] = TryT[Trampoline, A]
74-
*
75-
* val trampolineSuccess0: TryTTransfomredTrampoline[Int] = TryT(Trampoline.done(Try(0)))
76-
*
77-
* def dslTryCatch: TryTTransfomredTrampoline[String] = reset(TryT(Trampoline.delay(Try {
78-
* try {
79-
* s"Division result: ${!trampoline3 / !trampolineSuccess0}"
80-
* } catch {
81-
* case e: ArithmeticException =>
82-
* s"Cannot divide ${!trampoline3} by ${!trampolineSuccess0}"
83-
* }
84-
* })))
85-
*
86-
* inside(dslTryCatch) {
87-
* case TryT(trampoline) =>
88-
* trampoline.run should be(Success("Cannot divide 3 by 0"))
89-
* }
90-
* }}}
91-
*
92-
* Note that [[Dsl.Keyword#unary_$bang !-notation]] can be used on both
93-
* `trampoline3` and `trampolineSuccess0` even when they are different types,
94-
* i.e. `trampoline3` is a vanilla [[scalaz.Free.Trampoline Trampoline]], while
95-
* `trampolineSuccess0` is a
96-
* [[com.thoughtworks.tryt.invariant.TryT TryT]]-transfomred
97-
* [[scalaz.Free.Trampoline Trampoline]]. It is possible because the
98-
* interpreters of the [[keywords.Monadic]] invoke [[scalaz.MonadTrans.liftM]]
99-
* automatically.
100-
*
101-
* The above `dslTryCatch` method is equivalent to the following code in
102-
* [[scalaz.syntax]]:
103-
*
104-
* {{{
105-
* import _root_.scalaz.syntax.monad._
106-
* def scalazSyntaxTryCatch: TryTTransfomredTrampoline[String] = {
107-
* import _root_.scalaz.syntax.monadError._
108-
* trampoline3.liftM[TryT].flatMap { tmp0 =>
109-
* trampolineSuccess0.flatMap { tmp1 =>
110-
* TryT(Trampoline.delay(Try(s"Division result: ${tmp0 / tmp1}")))
111-
* }
112-
* }.handleError {
113-
* case e: ArithmeticException =>
114-
* trampoline3.liftM[TryT].flatMap { tmp2 =>
115-
* trampolineSuccess0.flatMap { tmp3 =>
116-
* TryT(Trampoline.delay(Try(s"Cannot divide ${tmp2} by ${tmp3}")))
117-
* }
118-
* }
119-
* case e =>
120-
* e.raiseError[TryTTransfomredTrampoline, String]
121-
* }
122-
* }
123-
*
124-
* inside(scalazSyntaxTryCatch) {
125-
* case TryT(trampoline) =>
126-
* trampoline.run should be(Success("Cannot divide 3 by 0"))
24+
* {{{
25+
* import _root_.scalaz.Trampoline
26+
* import _root_.scalaz.Free.Trampoline
27+
* import com.thoughtworks.dsl.keywords.Monadic
28+
* import com.thoughtworks.dsl.domains.scalaz.given
29+
* import com.thoughtworks.dsl.macros.Reset.Default.reset
30+
* import com.thoughtworks.dsl.keywords.Monadic.unary_!
31+
*
32+
* val trampoline3 = Trampoline.done(3)
33+
*
34+
* def dslSquare = reset(Trampoline.delay {
35+
* s"This string is produced by a trampoline: ${!trampoline3 * !trampoline3}"
36+
* })
37+
*
38+
* dslSquare.run should be("This string is produced by a trampoline: 9")
39+
* }}}
40+
* `!trampoline3` is a shortcut of `!Monadic(trampoline3)`, enabled by
41+
* `import com.thoughtworks.dsl.keywords.Monadic.given`, which will be
42+
* converted to `flatMap` calls by our DSL interpreter. Thus, the method
43+
* `dslSquare` is equivalent to the following code in [[scalaz.syntax]]:
44+
* {{{
45+
* def scalazSyntaxSquare = trampoline3.flatMap { tmp1 =>
46+
* trampoline3.flatMap { tmp2 =>
47+
* Trampoline.delay {
48+
* s"This string is produced by a trampoline: ${tmp1 * tmp2}"
49+
* }
50+
* }
51+
* }
52+
*
53+
* scalazSyntaxSquare.run should be("This string is produced by a trampoline: 9")
54+
* }}}
55+
* A `@[[Dsl.reset reset]]` code block can contain `try` / `catch` /
56+
* `finally` if the monadic data type supports [[scalaz.MonadError]].
57+
* [[https://github.com/ThoughtWorksInc/tryt.scala tryt.scala]] is a monad
58+
* transformer that provides [[scalaz.MonadError]], therefore `try` / `catch`
59+
* / `finally` expressions can be used inside a `@[[Dsl.reset reset]]` code
60+
* block whose return type is `TryT[Trampoline, ?]`.
61+
* {{{
62+
* import com.thoughtworks.tryt.invariant.TryT, TryT.given
63+
* import scala.util.{Try, Success}
64+
* type TryTTransfomredTrampoline[A] = TryT[Trampoline, A]
65+
*
66+
* val trampolineSuccess0: TryTTransfomredTrampoline[Int] = TryT(Trampoline.done(Try(0)))
67+
*
68+
* def dslTryCatch: TryTTransfomredTrampoline[String] = reset(TryT(Trampoline.delay(Try {
69+
* try {
70+
* s"Division result: ${!trampoline3 / !trampolineSuccess0}"
71+
* } catch {
72+
* case e: ArithmeticException =>
73+
* s"Cannot divide ${!trampoline3} by ${!trampolineSuccess0}"
74+
* }
75+
* })))
76+
*
77+
* inside(dslTryCatch) {
78+
* case TryT(trampoline) =>
79+
* trampoline.run should be(Success("Cannot divide 3 by 0"))
80+
* }
81+
* }}}
82+
* Note that [[Dsl.Keyword#unary_$bang !-notation]] can be used on both
83+
* `trampoline3` and `trampolineSuccess0` even when they are different types,
84+
* i.e. `trampoline3` is a vanilla [[scalaz.Free.Trampoline Trampoline]], while
85+
* `trampolineSuccess0` is a
86+
* [[com.thoughtworks.tryt.invariant.TryT TryT]]-transfomred
87+
* [[scalaz.Free.Trampoline Trampoline]]. It is possible because the
88+
* interpreters of the [[keywords.Monadic]] invoke [[scalaz.MonadTrans.liftM]]
89+
* automatically. <p> The above `dslTryCatch` method is equivalent to the
90+
* following code in [[scalaz.syntax]]:
91+
* {{{
92+
* import _root_.scalaz.syntax.monad._
93+
* def scalazSyntaxTryCatch: TryTTransfomredTrampoline[String] = {
94+
* import _root_.scalaz.syntax.monadError._
95+
* trampoline3.liftM[TryT].flatMap { tmp0 =>
96+
* trampolineSuccess0.flatMap { tmp1 =>
97+
* TryT(Trampoline.delay(Try(s"Division result: ${tmp0 / tmp1}")))
98+
* }
99+
* }.handleError {
100+
* case e: ArithmeticException =>
101+
* trampoline3.liftM[TryT].flatMap { tmp2 =>
102+
* trampolineSuccess0.flatMap { tmp3 =>
103+
* TryT(Trampoline.delay(Try(s"Cannot divide ${tmp2} by ${tmp3}")))
127104
* }
128-
* }}}
105+
* }
106+
* case e =>
107+
* e.raiseError[TryTTransfomredTrampoline, String]
108+
* }
109+
* }
110+
*
111+
* inside(scalazSyntaxTryCatch) {
112+
* case TryT(trampoline) =>
113+
* trampoline.run should be(Success("Cannot divide 3 by 0"))
114+
* }
115+
* }}}
129116
*
130117
* @author
131118
* 杨博 (Yang Bo)

0 commit comments

Comments
 (0)