Skip to content

Instantly share code, notes, and snippets.

View oxbowlakes's full-sized avatar

Christopher Marshall oxbowlakes

View GitHub Profile
@oxbowlakes
oxbowlakes / BrokenTraversableOnce.scala
Last active January 13, 2016 20:04
Demonstration of a broken TraversableOnce implementation of reduceLeft
//I have a Java interface which looks like this
trait ConsumableResource[A <: AnyRef] extends AutoCloseable {
/** returns `null` when we are ended */
def take(): A
}
//I would like to make this viewable as a scala `TraversableOnce` where the resource is automatically closed at the end of the traversal
object Lenses {
/*
This gist shows that LensP (modification inside a functor) is isomorphic to LensR (getter and setter)
In particular, it shows that you can derive the signature: S => A from (A => F[A]) => (S => F[S])
This is puzzling at first glance, because it gives rise to the question:
"if I end up with an F[S], how can I get a A out of it?"
We use the Const type where Const[A, X] = X. Note that Const[_, X] is a functor, but will always return
the value X which was originally stored in it!
package gsa.domain.scala.dan
import scalaz.Leibniz.===
import scalaz._
import Scalaz._
import gsa.shared.scala._ //gets you Date, Instant types
/**
* We wish to use a DomainService to get a snapshot of our domain (e.g. Books and SubBusinessUnits).
object ReferenceDirective extends Enumeration {
val Replace, DoNotReplace = Value
def replace: Value = Replace
def doNotReplace: Value = DoNotReplace
}
import java.util.concurrent.atomic._
import scalaz._
/**
@oxbowlakes
oxbowlakes / furnace.scala
Last active January 4, 2016 22:19
For FPX 2014
//requires scala 2.10.x
//requires scalaz-2.10-7.0.x
package fpx
// Furnace types (in reality, these come from a Java API and are real!)
trait FurnaceService {
def createSession(user: String, password: String): FurnaceSession
@oxbowlakes
oxbowlakes / fewchaz.scala
Created January 28, 2014 11:45
Construct a scala future on top on a standard Java Executor service
package fewchaz
import scala.util.{Failure, Success, Try}
import scala.concurrent.{CanAwait, ExecutionContext}
import java.util.concurrent._
import scala.util.control.NonFatal
trait Fewcha[T] extends scala.concurrent.Future[T] {
def futr: Future[T]
private[this] final def toTry: Try[T] = try util.Success(futr.get()) catch { case NonFatal(t) => util.Failure(t)}
import java.math.BigInteger
/**
* Clients can use this class instead, which means they only need fill in the
* V compute(K) method
*/
abstract class ConcCache2<K, V> {
private final ConcCache<K, V> cache = new ConcCache<>();
@oxbowlakes
oxbowlakes / concurrency.java
Last active May 11, 2018 08:54
Concurrency interview question
///////////////////////////////////////////////////////////////////////
// You are supplied with the following interfaces/implementations
///////////////////////////////////////////////////////////////////////
/** Interface representing the performing of a computation at some specific key */
public interface Computation<K, V> {
K key();
V compute();
}
@oxbowlakes
oxbowlakes / OxbowSolarizedDark2.icls
Last active December 19, 2015 14:09
OxbowSolarizedDark2
<?xml version="1.0" encoding="UTF-8"?>
<scheme name="OxbowSolarizedDark2" version="124" parent_scheme="Default">
<option name="LINE_SPACING" value="1.2" />
<option name="EDITOR_FONT_SIZE" value="13" />
<option name="EDITOR_FONT_NAME" value="Consolas" />
<colors>
<option name="ADDED_LINES_COLOR" value="" />
<option name="ANNOTATIONS_COLOR" value="2b36" />
<option name="ANNOTATIONS_MERGED_COLOR" value="" />
<option name="CARET_COLOR" value="dc322f" />
import scalaz._;import Scalaz._; import concurrent._
/* Imagine you have some expensive calculations you wish to make: */
trait RawApi {
def expensiveInt: Int = Int.MaxValue
def expensiveString: String = "expensive"
}
/* You wish to write a program using this API */
case class Result(i: Int, s: String)