| Copyright | (C) 2015-2016, University of Twente |
|---|---|
| License | BSD2 (see the file LICENSE) |
| Maintainer | Christiaan Baaij <christiaan.baaij@gmail.com> |
| Safe Haskell | None |
| Language | Haskell2010 |
CLaSH.Normalize.PrimitiveReductions
Description
Reductions of primitives
Currently, it contains reductions for:
- CLaSH.Sized.Vector.map
- CLaSH.Sized.Vector.zipWith
- CLaSH.Sized.Vector.traverse#
- CLaSH.Sized.Vector.foldr
- CLaSH.Sized.Vector.fold
- CLaSH.Sized.Vector.dfold
- CLaSH.Sized.Vector.(++)
- CLaSH.Sized.Vector.head
- CLaSH.Sized.Vector.tail
- CLaSH.Sized.Vector.unconcatBitVector#
- CLaSH.Sized.Vector.replicate
- CLaSH.Sized.Vector.imap
Partially handles:
- CLaSH.Sized.Vector.unconcat
- CLaSH.Sized.Vector.transpose
- reduceZipWith :: Integer -> Type -> Type -> Type -> Term -> Term -> Term -> NormalizeSession Term
- reduceMap :: Integer -> Type -> Type -> Term -> Term -> NormalizeSession Term
- reduceImap :: Integer -> Type -> Type -> Term -> Term -> NormalizeSession Term
- reduceTraverse :: Integer -> Type -> Type -> Type -> Term -> Term -> Term -> NormalizeSession Term
- mkTravVec :: TyConName -> DataCon -> DataCon -> Term -> Term -> Term -> Type -> Integer -> [Term] -> Term
- reduceFoldr :: Integer -> Type -> Type -> Term -> Term -> Term -> NormalizeSession Term
- reduceFold :: Integer -> Type -> Term -> Term -> NormalizeSession Term
- reduceDFold :: Integer -> Type -> Term -> Term -> Term -> NormalizeSession Term
- reduceHead :: Integer -> Type -> Term -> NormalizeSession Term
- reduceTail :: Integer -> Type -> Term -> NormalizeSession Term
- reduceAppend :: Integer -> Integer -> Type -> Term -> Term -> NormalizeSession Term
- reduceUnconcat :: Integer -> Integer -> Type -> Term -> NormalizeSession Term
- reduceTranspose :: Integer -> Integer -> Type -> Term -> NormalizeSession Term
- reduceReplicate :: Integer -> Type -> Type -> Term -> NormalizeSession Term
Documentation
Arguments
| :: Integer | Length of the vector(s) |
| -> Type | Type of the lhs of the function |
| -> Type | Type of the rhs of the function |
| -> Type | Type of the result of the function |
| -> Term | The zipWith'd functions |
| -> Term | The 1st vector argument |
| -> Term | The 2nd vector argument |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.zipWith primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.zipWith
Arguments
| :: Integer | Length of the vector |
| -> Type | Argument type of the function |
| -> Type | Result type of the function |
| -> Term | The map'd function |
| -> Term | The map'd over vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.map primitive on vectors
of a known length n, by the fully unrolled recursive "definition" of
CLaSH.Sized.Vector.map
Arguments
| :: Integer | Length of the vector |
| -> Type | Argument type of the function |
| -> Type | Result type of the function |
| -> Term | The imap'd function |
| -> Term | The imap'd over vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.imap primitive on vectors
of a known length n, by the fully unrolled recursive "definition" of
CLaSH.Sized.Vector.imap
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the argument vector |
| -> Type | The type of the applicative |
| -> Type | Element type of the result vector |
| -> Term | The |
| -> Term | The function to traverse with |
| -> Term | The argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.traverse# primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.traverse#
Arguments
| :: TyConName | Vec tcon |
| -> DataCon | Nil con |
| -> DataCon | Cons con |
| -> Term |
|
| -> Term |
|
| -> Term |
|
| -> Type |
|
| -> Integer | Length of the vector |
| -> [Term] | Elements of the vector |
| -> Term |
Create the traversable vector
e.g. for a length '2' input vector, we get
(:>) <$> x0 <*> ((:>) <$> x1 <*> pure Nil)
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the argument vector |
| -> Type | Type of the starting element |
| -> Term | The function to fold with |
| -> Term | The starting value |
| -> Term | The argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.foldr primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.foldr
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the argument vector |
| -> Term | The function to fold with |
| -> Term | The argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.fold primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.fold
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the argument vector |
| -> Term | Function to fold with |
| -> Term | Starting value |
| -> Term | The vector to fold |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.dfold primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.dfold
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the vector |
| -> Term | The argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.head primitive on
vectors of a known length n, by a projection of the first element of a
vector.
Arguments
| :: Integer | Length of the vector |
| -> Type | Element type of the vector |
| -> Term | The argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.tail primitive on
vectors of a known length n, by a projection of the tail of a
vector.
Arguments
| :: Integer | Length of the LHS arg |
| -> Integer | Lenght of the RHS arg |
| -> Type | Element type of the vectors |
| -> Term | The LHS argument |
| -> Term | The RHS argument |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.(++) primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.(++)
Arguments
| :: Integer | Length of the result vector |
| -> Integer | Length of the elements of the result vector |
| -> Type | Element type |
| -> Term | Argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.unconcat primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.unconcat
Arguments
| :: Integer | Length of the result vector |
| -> Integer | Length of the elements of the result vector |
| -> Type | Element type |
| -> Term | Argument vector |
| -> NormalizeSession Term |
Replace an application of the CLaSH.Sized.Vector.transpose primitive on
vectors of a known length n, by the fully unrolled recursive "definition"
of CLaSH.Sized.Vector.transpose
reduceReplicate :: Integer -> Type -> Type -> Term -> NormalizeSession Term Source