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

Copyright(C) 2012-2016 University of Twente
LicenseBSD2 (see the file LICENSE)
MaintainerChristiaan Baaij <christiaan.baaij@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Clash.Rewrite.Combinators

Description

Rewriting combinators and traversals

Synopsis

Documentation

allR Source #

Arguments

:: (Monad m, Fresh m) 
=> Bool

Freshen variable references in abstracted terms

-> Transform m

The transformation to apply to the subtrees

-> Transform m 

Apply a transformation on the subtrees of an term

(>->) :: Monad m => Transform m -> Transform m -> Transform m infixr 6 Source #

Apply two transformations in succession

(>-!->) :: Monad m => Transform m -> Transform m -> Transform m infixr 6 Source #

Apply two transformations in succession, and perform a deepseq in between.

topdownR :: Rewrite m -> Rewrite m Source #

Apply a transformation in a topdown traversal

unsafeTopdownR :: Rewrite m -> Rewrite m Source #

Apply a transformation in a topdown traversal. Doesn't freshen bound variables

bottomupR :: Fresh m => Transform m -> Transform m Source #

Apply a transformation in a bottomup traversal

unsafeBottomupR :: Fresh m => Transform m -> Transform m Source #

Apply a transformation in a bottomup traversal. Doesn't freshen bound variables

(!->) :: Rewrite m -> Rewrite m -> Rewrite m infixr 5 Source #

Only apply the second transformation if the first one succeeds.

(>-!) :: Rewrite m -> Rewrite m -> Rewrite m infixr 5 Source #

Only apply the second transformation if the first one fails.

repeatR :: Rewrite m -> Rewrite m Source #

Keep applying a transformation until it fails.

whenR :: Monad m => ([CoreContext] -> Term -> m Bool) -> Transform m -> Transform m Source #

bottomupWhenR :: Fresh m => ([CoreContext] -> Term -> m Bool) -> Transform m -> Transform m Source #

Only traverse downwards when the assertion evaluates to true