Skip to content

Instantly share code, notes, and snippets.

View oxbowlakes's full-sized avatar

Christopher Marshall oxbowlakes

View GitHub Profile
@oxbowlakes
oxbowlakes / imperial-monoid.scala
Created March 13, 2012 12:53
Monoid example
trait Monoid[A] {
def identity: A
def mplus(a1: A, a2: A): A
}
object Monoid {
implicit val IntMonoid = new Monoid[Int] {
def identity = 0
def mplus(a1: Int, a2: Int) = a1 + a2
}
@oxbowlakes
oxbowlakes / imperial-position.scala
Created March 13, 2012 12:54
Position example (using monoid)
object Positions {
trait Investment
trait Position {
def investment: Investment
def tradingPnL: Option[Double]
def inventoryPnL: Option[Double]
final def totalPnL = inventoryPnL → tradingPnL
}
import Monoid._
@oxbowlakes
oxbowlakes / lens-example-tradingday.scala
Created April 24, 2012 10:05
Lens/State Example to remove repetition
object TradingDays extends App {
import scalaz._
import Scalaz._
case class Trade(sym: String, trader: String, qty: Int)
case class TradingDay(symbols: Map[String, SymDay] = Map.empty)
object TradingDay {
@oxbowlakes
oxbowlakes / exercises.scala
Created October 3, 2012 16:00
Scala Exercises
This is how we create an inclusive/exclusive range of Ints:
val ie = 0 until 500
//1. Fill in the missing item to create a range of Ints from 1 to 100 inclusive
val ints = 1 ??? 100
//2. Find the sum of the integers in this range
@oxbowlakes
oxbowlakes / vals.scala
Created October 4, 2012 07:14
Vals in Scala
// The declaration of a value in scala looks like this:
val x = 1
// ^ ^ ^
// ^ ^ the value we wish to assign our new value to
// ^ identifier (ie name of value)
// type of value (val or var)
// Each identifier in scala has an associated type (or, more accurately, it has many types ranging from the least to the most specific)
@oxbowlakes
oxbowlakes / defs.scala
Created October 4, 2012 07:44
Defs in scala
// In scala a def (called a "method") is defined as follows:
def foo(arg: String): Int = expr
// ^ ^ ^^ ^ ^ ^
// ^ ^ ^^ ^ ^ an expression, whose type must match the declared return type, if specified
// ^ ^ ^^ ^ ^
// ^ ^ ^^ ^ the declared return type (optional).
// ^ ^ ^^ ^
// ^ ^ ^^ the type of each argument must be declared
// ^ ^ ^^
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)
@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" />
@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();
}
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<>();