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

Copyright(C) 2012-2016, University of Twente
LicenseBSD2 (see the file LICENSE)
MaintainerChristiaan Baaij <>
Safe HaskellNone



Types used in Normalize modules



data NormalizeState Source

State of the NormalizeMonad




_normalized :: HashMap TmName (Type, Term)

Global binders

_specialisationCache :: Map (TmName, Int, Either Term Type) (TmName, Type)

Cache of previously specialised functions:

  • Key: (name of the original function, argument position, specialised term/type)
  • Elem: (name of specialised function,type of specialised function)
_specialisationHistory :: HashMap TmName Int

Cache of how many times a function was specialized

_specialisationLimit :: !Int

Number of time a function f can be specialized

_inlineHistory :: HashMap TmName (HashMap TmName Int)

Cache of function where inlining took place:

  • Key: function where inlining took place
  • Elem: (functions which were inlined, number of times inlined)
_inlineLimit :: !Int

Number of times a function f can be inlined in a function g

_inlineBelow :: !Int

Size of a function below which it is always inlined if it is not recursive

_primitives :: PrimMap BlackBoxTemplate

Primitive Definitions

type NormalizeMonad = State NormalizeState Source

State monad that stores specialisation and inlining information

type NormalizeSession = RewriteMonad NormalizeState Source

RewriteSession with extra Normalisation information

type NormRewrite = Rewrite NormalizeState Source

A Transform action in the context of the RewriteMonad and NormalizeMonad