hadean-std 0.2.0

Hadean stdlib. Requires Hadean Rust.
use std::{cmp,env,mem,ops,iter,marker,hash};
use std::collections::HashMap;
use hadean::{Sender,Receiver,Connection,Process,ChannelEndpoint,Channel,pid,spawn,ProcessTransfer};
use graph::{Graph,GraphInterpreter,EdgeIter,MessageIter};

impl<V,E> Graph<V,E> where V: ProcessTransfer, E: ProcessTransfer {
	/// Run [pagerank](https://en.wikipedia.org/wiki/PageRank) on the graph.
	pub fn pagerank(self, damping: f64, iterations: usize) -> Graph<(V,f64),E> where V: ProcessTransfer, (V,f64): ProcessTransfer, E: ProcessTransfer {
		let num_vertices = self.num_vertices();
		let initial = 1.0/num_vertices as f64;
		let vertex_map = sendfn!([V: 'static], [initial: f64], |vertex: V| (vertex, initial));
		let edge_map = sendfn!([E: 'static], [], |edge: E| edge);
		let mut graph: Graph<(V,f64),E> = self.map(vertex_map, edge_map);
		for _ in 0..iterations {
			graph.step(
				sendfn!([V: 'static, E: ProcessTransfer + 'static], [], |vert: (V, f64), edges: EdgeIter<E, f64>| {
					let score = vert.1;
					let out = score / edges.len() as f64;
					for mut edge in edges {
						edge.send(out);
					}
				}), sendfn!([V: 'static, E: 'static], [damping: f64, num_vertices: usize], |vert: (V, f64), messages: MessageIter<f64>| {
					let mut sum = 0f64;
					for val in messages {
						sum += val;
					}
					(vert.0,(1.0-damping) / num_vertices as f64 + damping * sum)
				})
			)
		}
		graph
	}
}