Skip to content
This repository was archived by the owner on Aug 17, 2019. It is now read-only.

Commit b58f5c2

Browse files
committed
Errors are (re)thrown
1 parent 5c57b01 commit b58f5c2

File tree

2 files changed

+43
-8
lines changed

2 files changed

+43
-8
lines changed

src/main/scala/com/ckkloverdos/maybe/Maybe.scala

+34-7
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ object Maybe {
144144
case _ Just(value)
145145
}
146146
} catch {
147-
case e: Throwable Failed(e)
147+
case e: Error
148+
throw e
149+
150+
case e: Throwable
151+
Failed(e)
148152
}
149153
}
150154
}
@@ -166,7 +170,13 @@ final case class Just[+A](get: A) extends MaybeOption[A] with MaybeEither[A] {
166170

167171
def mapJust[B >: A](f: (Just[A]) => Maybe[B]) = {
168172
try f(this)
169-
catch { case e: Exception Failed(e) }
173+
catch {
174+
case e: Error
175+
throw e
176+
177+
case e: Throwable
178+
Failed(e)
179+
}
170180
}
171181

172182
def mapNoVal[B >: A](f: => Maybe[B]) = this
@@ -188,17 +198,27 @@ final case class Just[+A](get: A) extends MaybeOption[A] with MaybeEither[A] {
188198
def ||[B >: A](f: Maybe[B]) = this
189199

190200
def map[B](f: (A) B)= Maybe(f(get))
201+
191202
def flatMap[B](f: (A) Maybe[B]) = {
192203
try f(get)
193204
catch {
194-
case t: Throwable Failed(t)
205+
case e: Error
206+
throw e
207+
208+
case e: Throwable
209+
Failed(e)
195210
}
196211
}
212+
197213
def filter(f: (A) Boolean): Maybe[A] = {
198214
try {
199215
if(f(get)) this else NoVal
200216
} catch {
201-
case t: Throwable Failed(t)
217+
case e: Error
218+
throw e
219+
220+
case e: Throwable
221+
Failed(e)
202222
}
203223
}
204224
def foreach[U](f: A U) = f(get)
@@ -276,7 +296,13 @@ final case class Failed(exception: Throwable) extends MaybeEither[Nothing] {
276296

277297
def mapFailed[B >: Nothing](f: (Failed) => Maybe[B]) = {
278298
try f(this)
279-
catch { case e: Exception Failed(e) }
299+
catch {
300+
case e: Error
301+
throw e
302+
303+
case e: Throwable
304+
Failed(e)
305+
}
280306
}
281307

282308
def fold[T](onJust: (Nothing) T)(onNoVal: T)(onFailed: (Failed) T) = onFailed(this)
@@ -298,8 +324,9 @@ final case class Failed(exception: Throwable) extends MaybeEither[Nothing] {
298324

299325
override def equals(that: Any) = {
300326
that match {
301-
case failed: Failed
302-
this.exception == failed.exception
327+
case Failed(exception)
328+
this.exception == exception
329+
303330
case _
304331
false
305332
}

src/main/scala/com/ckkloverdos/package.scala

+9-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ package object maybe {
2424
case a Just(a)
2525
}
2626
} catch {
27+
case e: Error
28+
throw e
29+
2730
case e: Throwable
2831
safeUnit(_catch)
2932
Failed(e)
@@ -38,7 +41,12 @@ package object maybe {
3841
@inline
3942
def safeUnit[A](f: A): Unit = {
4043
try f
41-
catch { case _ }
44+
catch {
45+
case e: Error
46+
throw e
47+
48+
case _
49+
}
4250
}
4351

4452
implicit def optionToMaybe[T](x: Option[T]): MaybeOption[T] = x match {

0 commit comments

Comments
 (0)