Skip to content

Instantly share code, notes, and snippets.

let forceFormat<'a>(a:'a) = match box a with
| :? Format as f -> f
| bad -> failwith ("not a format: " + bad.ToString())
type P2<'a, 'b>(a:'a, b:'b) =
interface Format with member f.Translate l =
l.TypeApplication("P2", [forceFormat(a).Translate l; forceFormat(b).Translate l])
def map[A,B](fa: F[A])(f: A => B): F[B] = bind(fa)(a => unit(f(a)))
def join[A](f: F[F[A]]): F[A] = bind(f)(identity)
def kleisli[A,B](f: A => B): A => F[B] = a => unit(f(a))
def bind2[A,B](fa: F[A])(f: A => F[B]): F[B] = join(map(fa)(f))
def ap[A,B](f: F[A => B])(fa: F[A]): F[B] = bind(f)(fab => map(fa)(fab))
def map2[A,B,C](fa: F[A], fb: F[B])(f: (A,B) => C): F[C] = bind(fa)(a => map(fb)(b => f(a,b)))
def map3[A,B,C,D](fa: F[A], fb: F[B], fc: F[C])(f: (A,B,C) => D): F[D] =
bind(fa)(a => bind(fb)(b => map(fc)(c => f(a,b,c))))
def lift2[A,B,C](f: (A,B) => C): (F[A],F[B]) => F[C] = (fa,fb) => map2(fa,fb)(f)
@joshcough
joshcough / Queues.scala
Created January 6, 2012 14:22
Trait linearization vs Functions: A Comparison
package jcdc.pluginfactory
object Queues{
def main(args:Array[String]){
println("queues with traits: lock then log")
QueuesWithTraitLinearization.lockThenLogQ.push(7)
println(QueuesWithTraitLinearization.lockThenLogQ.pop())
println("\n")
println("queues with traits: log then lock")
QueuesWithTraitLinearization.logThenLockQ.push(7)
def evalF(e:Exp): (Env[N,V] => V) = e match {
case ValE(v) => (_ => v)
case OpE(op, e1, e2) => e => op(evalF(e1)(e),evalF(e2)(e))
case IdE(s) => e => e.find(s).getOrElse(sys.error("undefined variable: " + s))
case LetE(IdE(s), e1, e2) => (e:Env[N,V]) => evalF(e2)(e.extend(s -> evalF(e1)(e)))
}
def eval(e:Exp)(implicit m: ReaderMonad[Env[N,V]]): Reader[Env[N,V],V] = e match {
case ValE(v) => m.unit(v)
object HTMLWriterWebServer {
import unfiltered.request._
import unfiltered.response._
import unfiltered.netty._
import unfiltered.netty.request._
def main(a: Array[String]) {
case class Report(command:String, module:String)
@joshcough
joshcough / gist:3296766
Created August 8, 2012 17:18
wall of code
/** 22-way sum writer */
def s22W[A0,F0,A1,F1,A2,F2,A3,F3,A4,F4,A5,F5,A6,F6,A7,F7,A8,F8,A9,F9,A10,F10,A11,F11,A12,F12,A13,F13,A14,F14,A15,F15,A16,F16,A17,F17,A18,F18,A19,F19,A20,F20,A21,F21,R](w0: Writer[A0,F0], w1: Writer[A1,F1], w2: Writer[A2,F2], w3: Writer[A3,F3], w4: Writer[A4,F4], w5: Writer[A5,F5], w6: Writer[A6,F6], w7: Writer[A7,F7], w8: Writer[A8,F8], w9: Writer[A9,F9], w10: Writer[A10,F10], w11: Writer[A11,F11], w12: Writer[A12,F12], w13: Writer[A13,F13], w14: Writer[A14,F14], w15: Writer[A15,F15], w16: Writer[A16,F16], w17: Writer[A17,F17], w18: Writer[A18,F18], w19: Writer[A19,F19], w20: Writer[A20,F20], w21: Writer[A21,F21])
(f: (A0 => EffectW[S22[F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21]], A1 => EffectW[S22[F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21]], A2 => EffectW[S22[F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21]], A3 => EffectW[S22[F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11
Compiled from "Goo.scala"
public final class Goo extends java.lang.Object{
public static int x();
Code:
0: getstatic #16; //Field Goo$.MODULE$:LGoo$;
3: invokevirtual #18; //Method Goo$.x:()I
6: ireturn
}
> update
[info] Updating {file:/Users/joshcough/work/MinecraftPlugins/core/}default-a38531...
[info] Resolving org.scala-lang#scala-library;2.10.0-M7 ...
[info] Resolving bukkit#craft-bukkit;1.3.1-R2.0 ...
[info] Resolving ch.spacebase#NPCCreatures;1.4 ...
[info] Resolving org.scalacheck#scalacheck_2.10;1.10.0 ...
[warn] module not found: org.scalacheck#scalacheck_2.10;1.10.0
[warn] ==== local: tried
[warn] /Users/joshcough/.ivy2/local/org.scalacheck/scalacheck_2.10/1.10.0/ivys/ivy.xml
[warn] ==== sonatype-snapshots: tried
val goto = Command("goto", "Teleport to a player.", args(player or (num ~ num ~ opt(num))){
case you ~ Left(them) => you.teleportTo(them)
case you ~ Right(x ~ y ~ Some(z)) => you.teleport(you.world(x, y, z))
case you ~ Right(x ~ z ~ None) =>
you.teleportTo(you.world.getHighestBlockAt(you.world(x, 0, z)))
})
name: MultiPlayerCommands
main: jcdc.pluginfactory.examples.MultiPlayerCommands
author: Josh Cough
version: 0.1
database: false
commands:
goto:
description: Teleport to a player.
usage: /<command> (player-name or number number optional(number))
set-time: