Skip to content

Instantly share code, notes, and snippets.

View stevenblenkinsop's full-sized avatar

Steven Blenkinsop stevenblenkinsop

View GitHub Profile
type RenderData = u32;
struct Manager {
num_entities: usize,
render_data: Vec<Option<RenderData>>
}
pub fn main() {
let mut entity_manager = Manager {
@stevenblenkinsop
stevenblenkinsop / playground.rs
Last active August 29, 2015 14:24 — forked from anonymous/playground.rs
Rust monads binding FnOnce
#![feature(fnbox)]
use std::ops::Mul;
pub mod hkt {
pub trait HktAt<T> {
type Out: HasHkt<Hkt=Self, Arg=T>;
}
pub trait HasHkt {
@stevenblenkinsop
stevenblenkinsop / playground.rs
Last active August 29, 2015 14:24 — forked from anonymous/playground.rs
Rust monads with binding Fn
use std::ops::Mul;
pub mod hkt {
pub trait HktAt<T> {
type Out: HasHkt<Hkt=Self, Arg=T>;
}
pub trait HasHkt {
type Arg;
type Hkt: HktAt<Self::Arg, Out=Self>;
#![allow(dead_code)]
macro_rules! pipe {
((); $e:expr; $($args:tt)*) => ($e);
(($m:ident | $($ms:ident)|+) ; $($args:tt)*) => ($m!(($($ms)|+) ; $($args)*));
(($m:ident) ; $($args:tt)*) => ($m!((); $($args)*));
($($ms:ident)|*) => (pipe!(($($ms)|*);));
}
macro_rules! zero {
#![allow(dead_code)]
macro_rules! pipe {
((); $e:expr; $($args:tt)*) => ($e);
(($m:ident | $($ms:ident)|+) ; $($args:tt)*) => ($m!(($($ms)|+) ; $($args)*));
(($m:ident) ; $($args:tt)*) => ($m!((); $($args)*));
($($ms:ident)|*) => (pipe!(($($ms)|*);));
}
macro_rules! incr {
use std::collections::hash_map::HashMap;
use std::cell::Cell;
#[deriving(Show)]
struct Adder<'a>(&'a Cell<uint>);
impl <'a> Adder<'a> {
fn add(&mut self, i: uint) {
let &Adder(cell) = self;
cell.set(cell.get() + i);