typr 0.3.2

A superset of the legendary R
# Hey

module Matrice {
	type Mat<#M, #N> =
		[#M, [#N, num]];

	type CVec<#M> =
		[#M, [1, num]];

	type LVec<#M> =
		[1, [#M, num]];

	let add <- fn(m1: Mat<#M, #N>, m2: Mat<#M, #N>): Mat<#M, #N> {
		...
	};

	let transpose <- fn(m: Mat<#M, #N>): Mat<#N, #M> {
		...
	};

	let dot <- fn(m1: Mat<#M, P>, m2: mat<P, #N>): Mat<#M, #N> {
		...
	};

	let cvec <- fn(a: [#N, T]): CVec<#N> {
		...
	};

	let lvec <- fn(a: [#N, T]): LVec<#N> {
		a.cvec().transpose()	
	};
}

from Matrice use *;

# machine learning
type Layer = 
	(CVec<#M>) -> CVec<#N>;
type Activation = 
	(num) -> num;

let relu <- fn(a: num): num {
	...
};

let classic_layer <- fn(m: Mat<#M, #N>, b: CVec<#M>, a: Activation): Layer {
	return fn(v: CVec<#M>): CVec<#N> { 
		v 
		|> transpose()
		|> dot(m)
		|> add(b)
		|> map(a)
	};
};

let m = [[1, 2, 3], [4, 5, 6]];
let b = [4, 5, 6].cvec();
let b = [4, 5, 6].cvec();

let v = [1, 2, 3].cvec();

v
	|> classic_layer(m, b, relu)
	|> classic_layer(m, b, relu)
	|> classic_layer(m, b, relu);