clash-lib-0.99.3: CAES Language for Synchronous Hardware - As a Library

Copyright (C) 2015-2016 University of Twente2016 Myrtle Software Ltd BSD2 (see the file LICENSE) Christiaan Baaij None 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.tail
• Clash.Sized.Vector.unconcatBitVector#
• Clash.Sized.Vector.replicate
• Clash.Sized.Vector.imap
• Clash.Sized.Vector.dtfold
• Clash.Sized.RTree.tfold

Partially handles:

• Clash.Sized.Vector.unconcat
• Clash.Sized.Vector.transpose
Synopsis

# 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 Applicative dictionary -> 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 pure term -> Term <*> term -> Term fmap term -> Type b ty -> 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 -> 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 vector -> Type Element type of the vector -> Term The argument vector -> NormalizeSession Term

Replace an application of the Clash.Sized.Vector.last primitive on vectors of a known length n, by a projection of the last 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.init primitive on vectors of a known length n, by a projection of the init 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

Arguments

 :: Integer Length of the vector -> Type Element type of the argument vector -> Term Function to convert elements with -> Term Function to combine branches with -> Term The vector to fold -> NormalizeSession Term

Replace an application of the Clash.Sized.Vector.dtfold primitive on vectors of a known length n, by the fully unrolled recursive "definition" of Clash.Sized.Vector.dtfold

Arguments

 :: Integer Depth of the tree -> Type Element type of the argument tree -> Term Function to convert elements with -> Term Function to combine branches with -> Term The tree to fold -> NormalizeSession Term

Replace an application of the Clash.Sized.RTree.tdfold primitive on trees of a known depth n, by the fully unrolled recursive "definition" of Clash.Sized.RTree.tdfold

Arguments

 :: Integer Depth of the tree -> Type Element type -> Type Result type -> Term Element -> NormalizeSession Term