Skip to content

Instantly share code, notes, and snippets.

@bshlgrs
Created March 10, 2015 05:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bshlgrs/275198bd97814c4736a1 to your computer and use it in GitHub Desktop.
Save bshlgrs/275198bd97814c4736a1 to your computer and use it in GitHub Desktop.
case class Loanable[A](loan: A, close: () => Unit) {
def foreach[B](f: A => B): Unit = {
f(loan)
close()
}
def map[B](f: A => B): Loanable[B] = {
new Loanable(f(loan), close)
}
def flatMap[B](extraStuff: A => Loanable[B]): Loanable[B] = {
val newLoan = extraStuff(loan): Loanable[B]
new Loanable(newLoan.loan: B, () => { close(); newLoan.close() })
}
def filter(p: A => Boolean) = {
???
}
def get() = {
close()
loan
}
}
object Loanable {
def loan[A](a: A): Loanable[A] = new Loanable(a, () => {
println("LOL CLOSING")
})
}
object Thing {
def main (args: Array[String]) {
val whatever = for (
x <- Loanable.loan(1);
y <- Loanable.loan(3)
) { println(x + y) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment