tensor-0.2.0: A completely type-safe library for linear algebra

Safe HaskellSafe-Inferred




class Tensor t whereSource

A Tensor is a map from an Index type (which should be a MultiIndex) to an Element type.

Associated Types

type Index t Source

type Elem t Source


(!) :: t -> Index t -> Elem tSource

dims returns the dimensions of the Tensor. In any instance of Tensor dims should be independent of its argument and work on undefined. | Returns the Element of t corresponding to Index t.

generate :: (Index t -> Elem t) -> tSource

Generates a Tensor according to the given function.


MultiIndex i => Tensor (Tensor i e) 

replicate :: Tensor t => Elem t -> tSource

Generates a Tensor consisting of the same Element repeated.

elemMap :: (Tensor t1, Tensor t2, Index t1 ~ Index t2) => (Elem t1 -> Elem t2) -> t1 -> t2Source

elemMap f t applies f to every Element of t.

indexMap :: (Tensor t1, Tensor t2, Elem t1 ~ Elem t2) => (Index t1 -> Index t2) -> t2 -> t1Source

In indexMap f t, the Element corresponding to the Index i is the Element that t assignes to the Index f i.

class FromList t whereSource


fromList :: [e] -> t eSource


class DirectSum n t1 t2 whereSource

Associated Types

type SumSpace n t1 t2 Source


directSum :: n -> t1 -> t2 -> SumSpace n t1 t2Source

split :: n -> SumSpace n t1 t2 -> (t1, t2)Source


class Transpose t whereSource

Associated Types

type TransposeSpace t Source


(Ordinal i, Ordinal j) => Transpose (Tensor (:|: i (:|: j Nil)) e) 

class Zip t whereSource


zipWith :: (a -> b -> c) -> t a -> t b -> t cSource


Zip (Tensor i) 

class Sliceable i j t whereSource

Slices the Tensor t by dropping i at the beginning of its Index and j at the end. The result has type Slice i j t.

Associated Types

type Slice i j t Source


slice :: i -> j -> t -> Slice i j tSource

Extracts the Slice of t for the given initial and final indices i and j.


(MultiIndex i, MultiIndex j, Extend i l, ReverseList j, ReverseList (Ext i l), Extend (Reverse j) (Reverse (Ext i l)), ReverseList (Ext (Reverse j) (Reverse (Ext i l)))) => Sliceable i j (Tensor l e)