!{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                !"#$% & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ `abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o!p!q!r!s!t!u!v!w!x!y!z"{"|"}"~"""####################$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&'''''''''''''''((((((((0)(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>Safe4W(C) 2012-2016, University of Twente, 2017 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>SafeN clash-libComponent instantiation hole. First argument indicates which function argument to instantiate. Second argument corresponds to output and input assignments, where the first element is the output assignment, and the subsequent elements are the consecutive input assignments.eThe LHS of the tuple is the name of the signal, while the RHS of the tuple is the type of the signal clash-libElements of a blackbox context clash-libConstant clash-libComponent instantiation hole clash-lib Output hole; Bool asserts escape marker stripping clash-lib Input hole; Bool asserts escape marker stripping clash-lib Name hole clash-lib Literal hole clash-lib Symbol hole clash-libType declaration hole clash-libType root hole clash-libError value hole clash-lib&Select element type from a vector type clash-libIHole for the name of the component in which the blackbox is instantiated  clash-libAIndex data type hole, the field is the (exclusive) maximum index! clash-libSize of a type hole" clash-libLength of a vector hole# clash-libDepth of a tree hole$ clash-lib*Hole containing a filepath for a data file% clash-libGHole marking beginning (True) or end (False) of a generative construct( clash-libHole indicating whether IntWordInteger are 64-Bit) clash-lib>Hole indicating which synthesis tool we're generating HDL for* clash-lib*Convert to (True)/from(False) a bit-vector+ clash-libRecord selector of a type5 clash-lib)A BlackBox Template is a List of Elements* 3210/.-,+*(&% )4"'#!$5*53210/.-,+*(&% )4"'#!$ W(C) 2012-2016, University of Twente, 2017 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None^ ; clash-libParse a text as a BlackBoxTemplate, returns a list of errors in case parsing fails runParse :: Text -> (BlackBoxTemplate, [Error LineColPos]) runParse = PCC.parse ((,)  $ pBlackBoxD  */ pEnd) . createStr (LineColPos 0 0 0) clash-lib7Parse a BlackBoxTemplate (Declarations and Expressions) clash-libParse a single Template Element clash-lib!Parse the Text part of a Template clash-lib)Parse a Declaration or Expression element clash-libParse a Declaration clash-lib#Parse the output tag of Declaration clash-lib"Parse the input tag of Declaration clash-libParse an Expression element clash-libParse a bracketed text clash-lib/Parse the expression part of Blackbox Templates clash-libParse an Expression or Text clash-lib Parse SigD;;#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>Safe%`<=>?@<=>?@W(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None;=]p A clash-libExternally defined primitiveB clash-libLA primitive that has a template that can be filled out by the backend renderC clash-lib/A primitive that carries additional informationD clash-libName of the primitiveE clash-lib-Verilog only: whether the result should be a reg(True) or wire (False); when not specified in the .json" file, the value will default to False (i.e. wire).F clash-libVHDL only: add library! declarations for the given namesG clash-libVHDL only: add use! declarations for the given namesH clash-libCreate a file to be included with the generated primitive. The fields are ((name, extension), content), where content is a template of the file Defaults to Nothing when not specified in the .json fileI clash-lib Either a  declaration or an  expression template.J clash-libAdditional informationK clash-libPrimitive Definitions ABCJIGFEDHK KABCJIGFEDH*#(C) 2015-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>Nonevz clash-lib/Pretty print part of json file related to error clash-libMParse a ByteString according to the given JSON template. Prints failures on stdout, and returns  if parsing fails. clash-libBytestring to parse+Safev,Safe;=w(3      !"#$%&'()6-(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None06y.(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None068{/Safe{*+,-./01#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None;=DNQV{O clash-lib(A class that can generate unique numbersP clash-libGet a new uniqueQ clash-lib^Create a TH expression that returns the a formatted string containing the name of the module Q4 is spliced into, and the line where it was spliced.R clash-lib$Cache the result of a monadic actionS clash-libICache the result of a monadic action in a State 3 transformer layers downT clash-libSpine-strict cache variant of  mkCachedT3U clash-libIRun a State-action using the State that is stored in a higher-layer MonadV clash-libFunctorial version of 01W clash-libFunctorial version of 02Y clash-lib0Performs trace when first argument evaluates to 2Z clash-libMonadic version of 34[ clash-libMonadic version of 35\ clash-lib6Composition of a unary function with a binary function] clash-lib)if-then-else as a function on an argument^ clash-lib&Applicative version of 'GHC.Types.(:)'_ clash-libSafe indexing, returns a  if the index does not exist` clash-libBUnsafe indexing, return a custom error message when indexing failsa clash-lib5Split the second list at the length of the first listc clash-lib*x y -> floor (logBase x y), x > 1 && y > 0d clash-lib,x y -> ceiling (logBase x y), x > 1 && y > 0R clash-lib%The key the action is associated with clash-lib)The Lens to the HashMap that is the cache clash-libThe action to cacheS clash-lib%The key the action is associated with clash-lib)The Lens to the HashMap that is the cache clash-libThe action to cacheU clash-lib+Lens to the State in the higher-layer monad clash-libThe State-action to perform! NOPQRSTUVWXYZ[\]^_`abcd!OPQRSTUVWXYZ[\]^_`abcd N^5W(C) 2012-2016, University of Twente, 2017 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None g clash-libhGenerate a set of primitives that are found in the primitive definition files in the given directories.g clash-lib/Directories to search for primitive definitionsfgfg6P(C) 2015-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None;=>?(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None68;=>? hkjilmnopqhkjilmnopq P(C) 2012-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None68>?P clash-lib Type variable clash-lib Term variable clash-libVariables in CoreHW clash-libConstructor for type variables clash-libConstructor for term variables clash-libChange the name of a variable P(C) 2012-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None 68;=>?  clash-libDataCon reference clash-lib:Syntactical position of the DataCon in the type definition clash-libData Constructor clash-libName of the DataCon clash-lib+Syntactical position in the type definition clash-libType of the 'DataCon clash-libmUniversally quantified type-variables, these type variables are also part of the result type of the DataCon clash-libExistentially quantified type-variables, these type variables are not part of the result of the DataCon, but only of the arguments. clash-libArgument types clash-libGiven a DataCon and a list of types, the type variables of the DataCon type are substituted for the list of types. The argument types are returned.NThe list of types should be equal to the number of type variables, otherwise Nothing is returned. #(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None68;=>?- clash-libTyCon reference clash-libType Constructor clash-lib The RHS of an Algebraic Datatype clash-libThe DataCons of a TyCon clash-libThe newtype DataCon clash-libThe argument type of the newtype DataCon in eta-reduced form, which is just the representation of the TyCon. The TyName's are the type-variables from the corresponding TyCon. clash-libAlgorithmic DataCons clash-lib$Function TyCons (e.g. type families) clash-libPrimitive TyCons clash-lib'To close the loop on the type hierarchy clash-libName of the TyCon clash-libKind of the TyCon clash-libNumber of type arguments clash-libDataCon definitions clash-lib&List of: ([LHS match types], RHS type) clash-lib Create a Kind out of a TyConName clash-lib&Does the TyCon look like a tuple TyCon clash-lib%Get the DataCons belonging to a TyConX(C) 2012-2016, University of Twente, 2016 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>Noneј3 clash-lib Builtin Name4 clash-lib Builtin Name5 clash-lib Builtin Name6 clash-lib Builtin Name7 clash-lib Builtin Kind8 clash-lib Builtin Kind9 clash-lib Builtin Kind: clash-lib Builtin Kind; clash-lib Builtin Type< clash-lib Builtin Type= clash-lib Builtin Type> clash-lib Builtin Type? clash-lib Builtin Type@ clash-lib Builtin TypeA clash-lib Builtin TypeB clash-lib Builtin TypeC clash-lib Builtin TypeD clash-lib Builtin TypeE clash-lib Builtin Type(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None68;=>?ֹ clash-lib Term Literal clash-lib Determines the Type of a Literal P(C) 2012-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None68;=>?" clash-libTerm reference clash-libDTerm representation in the CoreHW language: System F + LetRec + Case clash-lib+Patterns in the LHS of a case-decomposition clash-libVDatatype pattern, '[TyVar]' bind existentially-quantified type-variables of a DataCon clash-libLiteral pattern clash-libDefault pattern clash-libBinding in a LetRec construct clash-libVariable reference clash-libDatatype constructor clash-libLiteral clash-lib Primitive clash-libTerm-abstraction clash-libType-abstraction clash-lib Application clash-libType-application  clash-libRecursive let-binding  clash-libECase-expression: subject, type of alternatives, list of alternatives  clash-lib$Cast a term from one type to another      P(C) 2012-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%_ clash-libSubstitutes types in a type clash-libSubstitutes a type in a type clash-libSubstitutes kinds in a kind  clash-libSubstitutes a type in a term! clash-libSubstitutes types in a term" clash-libSubstitutes a term in a term# clash-libSubstitutes terms in a term$ clash-lib#Substitutes a term in a let-binding !"#$ !"#$ (C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None %68;=>?Dl& clash-libReference to a Kind clash-libReference to a Type clash-libThe level above types clash-lib/Types in CoreHW: function and polymorphic types clash-libMake a Type out of a TyCon% clash-libEither a Kind or a Type& clash-lib Literal Types) clash-libType Constants* clash-lib TyCon type+ clash-lib Function type, clash-libAn easier view on types- clash-lib Function type. clash-lib Applied TyCon/ clash-libNeither of the above0 clash-lib Type variable1 clash-lib Type constant2 clash-libPolymorphic Type3 clash-libType Application4 clash-lib Type literal5 clash-libAn easier view on types6 clash-libA view on types in which newtypes are transparent, the Signal type is transparent, and type functions are evaluated to WHNF (when possible).Only strips away one "layer".F clash-libZInstantiate and Apply the RHS/Original of a NewType with the given list of argument typesReturns Nothing when under-applied7 clash-lib3Make a function type of an argument and result type8 clash-libDMake a TyCon Application out of a TyCon and a list of argument types9 clash-lib6Split a TyCon Application in a TyCon and its argumentsG clash-libIs a type a Superkind?: clash-libDetermine the kind of a type; clash-libIs a type polymorphic?< clash-lib4Split a function type in an argument and result type> clash-lib^Split a poly-function type in a: list of type-binders and argument types, and the result type? clash-libnSplit a poly-function type in a: list of type-binders and argument types, and the result type. Looks through Signal and type functions.@ clash-lib)Is a type a polymorphic or function type?A clash-lib/Is a type a polymorphic or function type under 6?B clash-libIs a type a function type?C clash-libAApply a function type to an argument type and get the result typeD clash-lib(Substitute the type variable of a type (2) with another typeH clash-libCSplit a type application in the applied type and the argument typesG clash-lib-The type of GHC.Err.undefined :: forall a . a-32410%&'()*+,.-/56789:;<=>?@ABCDEFGHI-32410,.-/)*+&'(%56:78<=>?9@A;BCDEFGHI(C) 2013-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , QBayLogic, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None'0 ` clash-libEInformation about the generated HDL between (sub)runs of the compilerb clash-libjHash of the TopEntity and all its dependencies + (maybe) Hash of the TestBench and all its dependenciesd clash-libFThe rendered versions of the types of the input ports of the TopEntity Used when dealing with multiple  TopEntityBs who have different names for types which are structurally equalf clash-libGThe rendered versions of the types of the output ports of the TopEntity Used when dealing with multiple  TopEntityBs who have different names for types which are structurally equalg clash-lib.Names of all the generated components for the  TopEntity7 (does not include the names of the components of the  TestBench accompanying the  TopEntity).z clash-libDebug Message Verbosity{ clash-libDon't show debug messages| clash-lib&Show completely normalized expressions} clash-lib Names of applied transformations~ clash-lib/Show sub-expressions after a successful rewrite clash-lib8Show all sub-expressions on which a rewrite is attempted clash-libGlobal function bindersBGlobal functions cannot be mutually recursive, only self-recursive# `abcdefghijklmnopqrstuvwxyz{|}~#`abcdefghijklmnopqrstuvwxyz{|}~ d(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None6Ke[ ? clash-lib8Context used to fill in the holes of a BlackBox template clash-libResult name and type clash-lib2Argument names, types, and whether it is a literal clash-lib&Function arguments (subset of inputs):6( Blackbox Template , Whether the result should be reg or a wire2 (Verilog only) , Partial Blackbox Context ) clash-lib Bit literal clash-libHigh clash-libLow clash-lib Undefined clash-libHigh-impedance clash-libLiterals used in an expression clash-libNumber literal clash-lib Bit literal clash-libBoolean literal clash-libVector literal clash-libString literal clash-lib'Expression used in RHS of a declaration clash-libLiteral expression clash-libDataCon application clash-libSignal reference clash-libLeft e : tagToEnum, @Right e@: dataToTag clash-lib&Instantiation of a BlackBox expression clash-libExpression Modifier clash-lib@Index the expression: (Type of expression,DataCon tag,Field Tag) clash-libJSee expression in a DataCon context: (Type of the expression, DataCon tag) clash-lib>See the expression in the context of a Vector append operation clash-lib<See the expression in the context of a Tree append operation clash-libInternals of a Component clash-libSignal assignment:Signal to assignAssigned expression clash-libConditional signal assignment:Signal to assignType of the result/alternativesScrutinized expressionType of the scrutineeVList of: (Maybe expression scrutinized expression is compared with,RHS of alternative) clash-lib"Instantiation of another component clash-lib%Instantiation of blackbox declaration clash-libSignal declaration clash-libRepresentable hardware types clash-lib Empty type.  Just Size for "empty" Vectors so we can still have primitives that can traverse e.g. Vectors of unit and know the lenght of that vector. clash-lib String type clash-lib Boolean type clash-libBit type clash-libBitVector of a specified size clash-lib9Unsigned integer with specified (exclusive) upper bounder clash-lib"Signed integer of a specified size clash-lib$Unsigned integer of a specified size clash-lib Vector type clash-lib RTree type clash-lib$Sum type: Name and Constructor names clash-lib"Product type: Name and field types clash-lib=Sum-of-Product type: Name and Constructor names + field types clash-lib)Clock type with specified name and period clash-libBReset type corresponding to clock with a specified name and period clash-lib?Size indication of a type (e.g. bit-size or number of elements) clash-lib!Component: base unit of a Netlist clash-libName of the component clash-lib Input ports clash-lib Output ports clash-libInternal declarations clash-libSignal reference clash-libState of the NetlistMonad clash-libGlobal binders clash-libNumber of signal declarations clash-libCached components clash-libPrimitive Definitions clash-lib#Hardcoded Type -> HWType translator clash-lib TyCon cache clash-lib}Monad that caches generated components (StateT) and remembers hidden inputs of components that are being generated (WriterT)j     q     d(C) 2015-2016, University of Twente, 2017 , Myrtle Software Ltd, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None^~  clash-libInitial state for state monad clash-lib"What HDL is the backend generating clash-lib&Location for the primitive definitions clash-libmName of backend, used for directory to put output files in. Should be | constant function / ignore argument. clash-lib"File extension for target langauge clash-lib!Get the set of types out of state clash-lib$Generate HDL for a Netlist component clash-libHGenerate a HDL package containing type definitions for the given HWTypes clash-lib-Convert a Netlist HWType to a target HDL type clash-lib<Convert a Netlist HWType to an HDL error value for that type clash-lib9Convert a Netlist HWType to the root of a target HDL type clash-libCreate a record selector clash-libHCreate a signal declaration from an identifier (Text) and Netlist HWType clash-lib*Create a generative block statement marker clash-lib4Turn a Netlist Declaration to a HDL concurrent block clash-lib/Turn a Netlist expression into a HDL expression clash-libBit-width of IntWordInteger  clash-libConvert to a bit-vector! clash-libConvert from a bit-vector" clash-lib'Synthesis tool we're generating HDL for# clash-lib mkIdentifier$ clash-lib mkIdentifier% clash-lib setModName& clash-lib setSrcSpan' clash-lib getSrcSpan( clash-libBlock of declarations) clash-libunextend/unescape identifier- clash-lib+Is a type used for internal or external use. clash-lib Internal use/ clash-lib.External use, field indicates the library name1 clash-libdTry to merge nested modifiers into a single modifier, needed by the VHDL and SystemVerilog backend.2 clash-lib]Replace a normal HDL template placeholder with an unescaped/unextended template placeholder.Needed when the the place-holder is filled with an escaped/extended identifier inside an escaped/extended identifier and we want to strip the escape /extension markers. Otherwise we end up with illegal identifiers.%,+*)(%"! $#&'-/.012%0-/.,+*)(%"! $#&'12#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>NoneW: clash-lib'Gives the free type-variables in a Type; clash-lib'Gives the free term-variables of a Term< clash-lib'Gives the free type-variables of a Term:;<:;<X(C) 2012-2016, University of Twente, 2016 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%;== clash-lib#Pretty printing Show-like typeclass@ clash-lib Print a Pretty thing to a String=>?@=>?@#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%~Q clash-libKind environment/contextR clash-libType environment/contextS clash-libDetermine the type of a termT clash-lib>Split a (Type)Application in the applied term and it argumentsU clash-libHSplit a (Type)Abstraction in the bound variables and the abstracted termV clash-libGGet the result type of a polymorphic function given a list of argumentsW clash-lib6Get the list of term-binders out of a DataType patternX clash-libMake a type variableY clash-libMake a term variableZ clash-lib6Abstract a term over a list of term and type variables[ clash-lib-Abstract a term over a list of term variables\ clash-lib-Abstract a term over a list of type variables] clash-lib)Apply a list of types and terms to a term^ clash-libApply a list of terms to a term_ clash-libApply a list of types to a term` clash-lib!Does a term have a function type?a clash-lib0Does a term have a function or polymorphic type?b clash-libIs a term a term-abstraction?c clash-lib"Is a term a recursive let-binding?d clash-libIs a term a variable reference?e clash-lib!Is a term a datatype constructor?f clash-libIs a term a primitive?g clash-lib,Make variable reference out of term variableh clash-lib0Make a term variable out of a variable referencej clash-lib$Create a vector of supplied elementsk clash-lib&Append elements to the supplied vectorl clash-libCreate let-bindings with case-statements that select elements out of a vector. Returns both the variables to which element-selections are bound and the let-bindingsm clash-libCreate let-bindings with case-statements that select elements out of a tree. Returns both the variables to which element-selections are bound and the let-bindingsn clash-lib$Create a vector of supplied elementso clash-libIDetermine whether a type is isomorphic to "Clash.Signal.Internal.Signal'" It is i.e.: Signal' clk a(Signal' clk a, Signal' clk b)Vec n (Signal' clk a)data Wrap = W (Signal clk' Int)etc.j clash-libThe Nil constructor clash-libThe Cons (:>) constructor clash-lib Element type clash-libLength of the vector clash-libElements to put in the vectork clash-libThe Cons (:>) constructor clash-lib Element type clash-lib$The vector to append the elements to clash-libLength of the vector clash-libElements to appendl clash-libThe Cons (:>) constructor clash-libThe element type clash-lib*Char to append to the bound variable names clash-libLength of the vector clash-lib The vectorm clash-libThe LR constructor clash-libThe BR constructor clash-libThe element type clash-lib*Char to append to the bound variable names clash-libDepth of the tree clash-libThe treen clash-libThe LR constructor clash-libThe BR constructor clash-lib Element type clash-libDepth of the tree clash-libElements to put in the tree!QRSTUVWXYZ[\]^_`abcdefghijklmnopq!RQSTUVWXYZ[\]^_`abcdefghijklmnopqd(C) 2012-2016, University of Twente, 2017 , Google Inc., Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%<N2u clash-libSplit a normalized term into: a list of arguments, a list of let-bindings, and a variable reference that is the body of the let-binding. Returns a String containing the error is the term was not in a normalized form.v clash-libConverts a Core type to a HWType given a function that translates certain builtin types. Errors if the Core type is not translatable.w clash-libKConverts a Core type to a HWType within the NetlistMonad; errors on failurex clash-lib:Converts a Core type to a HWType within the NetlistMonad;  on failurey clash-lib@Returns the name and period of the clock corresponding to a typez clash-libConverts a Core type to a HWType given a function that translates certain builtin types. Returns a string containing the error message when the Core type is not translatable.{ clash-libRConverts an algebraic Core type (split into a TyCon and its argument) to a HWType.| clash-lib/Simple check if a TyCon is recursively defined.} clash-libnDetermines if a Core type is translatable to a HWType given a function that translates certain builtin types.~ clash-lib Determines the bitsize of a type clash-lib3Determines the bitsize of the constructor of a type clash-lib(Gives the length of length-indexed types clash-lib}Gives the HWType corresponding to a term. Returns an error if the term has a Core type that is not translatable to a HWType. clash-lib2Gives the HWType corresponding to a term. Returns C if the term has a Core type that is not translatable to a HWType. clash-libLUniquely rename all the variables and their references in a normalized term clash-lib\Make a set of IDs unique; also returns a substitution from old ID to new updated unique ID. clash-libPreserve the Netlist _varEnv and  when executing a monadic action clash-lib$Create a Vector chain for a list of s clash-lib#Create a RTree chain for a list of s clash-libGenerate output port mappings clash-libIInstantiate a TopEntity, and add the proper type-conversions where needed clash-lib)Convert between BitVector for an argument clash-lib(Convert between BitVector for the result clash-lib&Add to/from-BitVector conversion logic clash-lib.Generate input port mappings for the TopEntity clash-lib/Generate output port mappings for the TopEntity y clash-lib TyCon cache{ clash-lib#Hardcoded Type -> HWType translator clash-lib TyCon cache clash-lib9String representation of the Core type for error messages clash-lib Keep Void clash-lib The TyCon clash-libIts applied arguments} clash-libAllow zero-bit things clash-libString considered representable clash-libExisting substitution clash-libIDs to make unique clash-lib!(Unique IDs, update substitution) clash-libName of the TopEntity component clash-lib(maybe) a corresponding  TopEntity annotation clash-liba corresponding Manifest clash-lib=The name and type of the signal to which to assign the result clash-lib The arguments clash-lib(maybe) Name of the _TopEntity_ clash-libEither: * A normal" argument * An argument with a PortName clash-lib(mabye) Name of the _TopEntity_ clash-libEither: * A normal result * A result with a PortName clash-lib!We only need it for certain types clash-libNothing: No _given_ TopEntity, no need for conversion, this happens when we have a _TestBench_, but no _TopEntity_ annotation.nJust Nothing: Converting to/from a BitVector for one of the internally defined types.fJust (Just top): Converting to/from a BitVector for one of the types defined by top. clash-libTrue: convert to a BitVectorFalse: convert from a BitVector clash-lib>The expression on top of which we have to add conversion logic clash-lib(maybe) Name of the _TopEntity_ clash-libRendered input port names and types clash-lib (maybe) The PortName+ of a _TopEntity_ annotation for this input clash-lib(maybe) Name of the _TopEntity_ clash-libRendered output port names and types clash-lib (maybe) The PortName, of a _TopEntity_ annotation for this output,rstuvwxyz{|}~,rstuvwxyz{|}~X(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd,BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%<] clash-lib!Determine if the number of normalliteralqfunction inputs of a blackbox context at least matches the number of argument that is expected by the template. clash-libuUpdate all the symbol references in a template, and increment the symbol counter for every newly encountered symbol. clash-libXRender a blackbox given a certain context. Returns a filled out template and a list of hidden9 inputs that must be added to the encompassing component. clash-libAssign Var holes in the context of a primitive HDL template that is passed as an argument of a higher-order HDL template. For the general case, use This functions errors when the Var{ hole cannot be filled with a variable, as it is (currently) impossible to create unique names this late in the pipeline. clash-lib Render a single template element clash-libFill out the template corresponding to an output/input assignment of a component instantiation, and turn it into a single identifier so it can be used for a new blackbox context. clash-libpGive a context and a tagged hole (of a template), returns part of the context that matches the tag of the hole. clash-libBlackbox to verify clash-libTemplate to check against clash-lib Context used to fill in the hole clash-libBlackbox templateP(C) 2015-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%LN]!h  clash-libState for the I monad:J clash-lib!Depth of current generative blockK clash-libIntWordInteger bit-widthL clash-lib%Generate VHDL for a Netlist componentM clash-lib6Convert a Netlist HWType to the root of a Verilog typeN clash-lib=Convert a Netlist HWType to an error VHDL value for that typeO clash-lib>Turn a Netlist Declaration to a SystemVerilog concurrent blockP clash-libQCalculate the beginning and end index into a variable, to get the desired field.Q clash-lib9Turn a Netlist expression into a SystemVerilog expressionP clash-lib/Offset, only used when we have nested modifiersQ clash-libEnclose in parenthesis? clash-libExpr to convertP(C) 2015-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%LN0u  clash-libState for the 78 monad:R clash-libPreviously encountered HWTypesS clash-libGenerated product typesT clash-lib1Cache for previously generated product type namesU clash-libIntWordInteger bit-widthV clash-lib3For which HDL synthesis tool are we generating VHDLW clash-lib%Generate VHDL for a Netlist componentX clash-libIGenerate a VHDL package containing type definitions for the given HWTypesY clash-lib'Convert a Netlist HWType to a VHDL typeZ clash-lib3Convert a Netlist HWType to the root of a VHDL type[ clash-lib=Convert a Netlist HWType to an error VHDL value for that type\ clash-lib5Turn a Netlist Declaration to a VHDL concurrent block] clash-lib0Turn a Netlist expression into a VHDL expression] clash-libEnclose in parenthesis? clash-libExpr to convertP(C) 2015-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%LN]>  clash-libState for the ^ monad:_ clash-libPreviously encountered HWTypes` clash-libProduct type countera clash-lib1Cache for previously generated product type namesb clash-lib!Depth of current generative blockc clash-libIntWordInteger bit-widthd clash-lib%Generate VHDL for a Netlist componente clash-libRGenerate a SystemVerilog package containing type definitions for the given HWTypesf clash-lib6Convert a Netlist HWType to the root of a Verilog typeg clash-lib=Convert a Netlist HWType to an error VHDL value for that typeh clash-lib>Turn a Netlist Declaration to a SystemVerilog concurrent blocki clash-lib9Turn a Netlist expression into a SystemVerilog expressioni clash-libEnclose in parenthesis? clash-libExpr to convert(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%Vu clash-libEFunction that can evaluator primitives, i.e., perform delta-reduction clash-libState of the evaluator clash-lib Functions clash-libType abstractions clash-libData constructors clash-libLiterals clash-libpClash's number types are represented by their "fromInteger#" primitive function. So some primitives are values. clash-lib The stack clash-libThe heap clash-lib6Evaluate to WHNF starting with an empty Heap and Stack clash-lib1Evaluate to WHNF given an existing Heap and Stack clash-lib<Are we in a context where special primitives must be forced.&See [Note: forcing special primitives] clash-lib9Completely unwind the stack to get back the complete term clash-lib!Small-step operational semantics. clash-lib#Force the evaluation of a variable. clash-libUnwind the stack by 1 clash-lib'Update the Heap with the evaluated term clash-libApply a value to a function clash-libInstantiate a type-abstraction clash-lib"Evaluation of primitive operations clash-libEvaluate a case-expression clash-lib!Allocate let-bindings on the heap clash-lib6Create a unique name and substitution for a let-binder clash-lib'Create a name that's unique in the heap clash-libName of the primitive clash-libType of the primitive clash-lib Applied types clash-libApplied values  clash-libThe current value  clash-lib6The remaining terms which must be evaluated to a value))(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None;=>?Ks clash-libState of a rewriting session clash-lib!Number of applied transformations clash-libGlobal binders clash-libSupply of unique numbers clash-lib&Function which is currently normalized clash-lib Used for j clash-libAdditional state clash-libContext in which a term appears clash-lib#Function position of an application clash-lib#Argument position of an application clash-lib'Function position of a type application clash-lib)RHS of a Let-binder with the sibling LHS' clash-lib)Body of a Let-binding with the bound LHS' clash-lib2Body of a lambda-term with the abstracted variable clash-lib:Body of a TyLambda-term with the abstracted type-variable clash-libMRHS of a case-alternative with the variables bound by the pattern on the LHS clash-libSubject of a case-decomposition clash-libBody of a Cast clash-lib,Read-only environment of a rewriting session clash-lib(Lvl at which we print debugging messages clash-lib"Hardcode Type -> HWType translator clash-lib TyCon cache clash-libTuple TyCon cache clash-lib&Hardcoded evaluator (delta-reduction)} clash-lib&Zero bit wide things are representable clash-lib)Functions that are considered TopEntities  clash-libA   action in the context of the    clash-lib=Monadic action that transforms a term given a certain context  clash-libMonad that keeps track how many transformations have been applied and can generate fresh variables and unique identifiers. In addition, it keeps track if a transformation/rewrite has been successfully applied..     .     (C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%QVZ clash-libLift an action working in the  state to the   clash-lib1Record if a transformation is succesfully applied  clash-lib"Perform a transformation on a Term! clash-lib,Evaluate a RewriteSession to its inner monad" clash-lib7Notify that a transformation has changed the expression# clash-lib^Identity function that additionally notifies that a transformation has changed the expression$ clash-lib>Create a type and kind context out of a transformation context' clash-libaCreate a complete type and kind context out of the global binders and the transformation context( clash-lib3Make a new binder and variable reference for a term) clash-libDMake a new binder and variable reference for either a term or a type* clash-libCMake a new, unique, identifier and corresponding variable reference+ clash-lib@Inline the binders in a let-binding that have a certain property, clash-libRDetermine whether a binder is a join-point created for a complex case expression.lA join-point is when a local function only occurs in tail-call positions, and when it does, more than once.- clash-libGCount the number of (only) tail calls of a function in an expression. B indicates that the function was used in a non-tail call position.. clash-lib6Determines whether a function has the following shape: \(w :: Void) -> f a b c8i.e. is a wrapper around a (partially) applied function f!, where the introduced argument w is not used by f/ clash-libSubstitute the RHS of the first set of Let-binders for references to the first set of Let-binders in: the second set of Let-binders and the additional term0 clash-libCalculate the localb free variable of an expression: the free variables that are not bound in the global environment.2 clash-libCreate a global function for a Let-binding and return a Let-binding where the RHS is a reference to the new global function applied to the free variables of the original RHS3 clash-lib,Make a global function for a name-term tuple4 clash-lib+Add a function to the set of global binders5 clash-lib@Create a new name out of the given name, but with another unique6 clash-lib=Test whether a term is a variable reference to a local binder7 clash-lib5Determine if a term cannot be represented in hardware8 clash-lib5Determine if a type cannot be represented in hardware9 clash-lib1Is the Context a Lambda/Term-abstraction context?: clash-lib+Make a binder that should not be referenced; clash-libNMake a case-decomposition that extracts a field out of a (Sum-of-)Product type< clash-lib)Specialise an application on its argument= clash-lib)Specialise an application on its argument@ clash-lib=Create binders and variable references for free variables in specArg clash-libName of the transformation clash-libTransformation to be applied  clash-libName of the transformation clash-libTransformation to perform clash-libTerm to transform( clash-lib TyCon cache clash-libName of the new binder clash-lib Term to bind) clash-lib TyCon cache clash-libName of the new binder clash-libType or Term to bind* clash-libName of the identifier+ clash-lib Property test, clash-lib of the local binder clash-lib'Expression in which the binder is bound- clash-libFunction to check clash-libExpression to check it in/ clash-libLet-binders to substitute clash-lib*Let-binders where substitution takes place clash-lib)Expression where substitution takes place1 clash-lib Property test clash-libTest whether to lift or inline True: inline False: lift3 clash-libName of the function clash-libTerm bound to the function clash-lib6Name with a proper unique and the type of the function7 clash-libString representable8 clash-libString representable; clash-lib#Name of the caller of this function clash-lib TyCon cache clash-libSubject of the case-composition< clash-lib"Lens into previous specialisations clash-lib$Lens into the specialisation history clash-lib"Lens into the specialisation limit= clash-lib"Lens into previous specialisations clash-lib Lens into specialisation history clash-lib"Lens into the specialisation limit clash-lib Original term clash-lib@Function part of the term, split into root and applied arguments clash-libArgument to specialize on# !"#$%&'()*+,-./0123456789:;<=>?@# !"#$%&'()*+,-./0123456789:;<=>?@#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>NoneVx A clash-lib1Apply a transformation on the subtrees of an termB clash-lib'Apply two transformations in successionC clash-libJApply two transformations in succession, and perform a deepseq in between.D clash-lib-Apply a transformation in a topdown traversalE clash-libOApply a transformation in a topdown traversal. Doesn't freshen bound variablesF clash-lib.Apply a transformation in a bottomup traversalG clash-libPApply a transformation in a bottomup traversal. Doesn't freshen bound variablesH clash-lib?Only apply the second transformation if the first one succeeds.I clash-lib<Only apply the second transformation if the first one fails.J clash-lib.Keep applying a transformation until it fails.L clash-lib<Only traverse downwards when the assertion evaluates to trueA clash-lib/Freshen variable references in abstracted terms clash-lib+The transformation to apply to the subtrees ABCDEFGHIJKL ABCDEFGHIJKLB6C6H5I5 O(C) 2012-2016, University of Twente, 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None;M clash-lib State of the `O clash-libGlobal bindersP clash-lib*Cache of previously specialised functions:NKey: (name of the original function, argument position, specialised term/type)AElem: (name of specialised function,type of specialised function)Q clash-lib2Cache of how many times a function was specializedR clash-libNumber of time a function f can be specializedS clash-lib,Cache of function where inlining took place:'Key: function where inlining took place=Elem: (functions which were inlined, number of times inlined)T clash-libNumber of times a function f can be inlined in a function gU clash-libKSize of a function below which it is always inlined if it is not recursiveV clash-libASize of a constant below which it is always inlined; 0 = no limitW clash-libPrimitive DefinitionsX clash-lib8Map telling whether a components is recursively defined.NNB: there are only no mutually-recursive component, only self-recursive ones.Y clash-libDescription of a Term' in terms of the type "components" the Term has.%Is used as a performance/size metric.[ clash-libNumber of functions\ clash-libNumber of primitives] clash-lib!Number of selections/multiplexers^ clash-libA  Transform action in the context of the   and `_ clash-lib3RewriteSession with extra Normalisation information` clash-lib?State monad that stores specialisation and inlining information!MNXVUTSRQPOWYZ]\[^_`abcdefghijlmn!MNXVUTSRQPOWjihgfedcba`_^YZ]\[nml!#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None"#]2 o clash-lib?A call graph counts the number of occurrences that a functions g is used in f.p clash-libADetermine if a function is already inlined in the context of the  NetlistMonadr clash-lib(Specialize under the Normalization Monads clash-libDetermine if a term is closedt clash-lib)Determine if a term represents a constantv clash-lib;Assert whether a name is a reference to a recursive binder.w clash-lib=Create a call graph for a set of global binders, given a rootx clash-libFGive a "performance/size" classification of a function in normal form.y clash-lib;Determine whether a function adds a lot of hardware or not.MIt is considered expensive when it has 2 or more of the following components: functions primitivesselections (multiplexers)p clash-libFunction we want to inline clash-lib1Function in which we want to perform the inliningq clash-libFunction we want to inline clash-lib1Function in which we want to perform the inlining opqrstuvwxy pqrstuvowxy"(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None"#%Nz clash-lib2Generate the context for a BlackBox instantiation.~ clash-libCreate an template instantiation text and a partial blackbox content for an argument term, given that the term is a function. Errors if the term is not a functionz clash-lib5Identifier binding the primitive/blackbox application clash-lib/Arguments of the primitive/blackbox application| clash-libLHS of the original let-binder} clash-lib&Put BlackBox expression in parenthesis clash-lib(Treat BlackBox expression as declaration clash-libId to assign the result to~ clash-libBIdentifier binding the encompassing primitive/blackbox application clash-libThe function argument termz{|}~z{|}~(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None"#%N4 3 clash-libxGenerate a list of Declarations for a let-binder, return an empty list if the bound expression is represented by 0 bits5 clash-libWGenerate a declaration that selects an alternative based on the value of the scrutinee6 clash-libGGenerate an expression that projects a field out of a data-constructor.6Works for both product types, as sum-of-product types.7 clash-libUGenerate an expression for a DataCon application occurring on the RHS of a let-binder8 clash-libFGenerate an expression for a term occurring on the RHS of a let-binder9 clash-lib3Generate a component for a given function (caching) clash-libEGenerate a hierarchical netlist out of a set of global binders with  topEntity at the top. clash-lib0Run a NetlistMonad action in a given environment clash-lib)Generate a component for a given function clash-lib0Generate a list of Declarations for a let-binder clash-libXGenerate a list of Declarations for a let-binder where the RHS is a function application 3 clash-libLHS of the let-binder clash-libRHS of the let-binder6 clash-lib)Projection must bind to a simple variable clash-lib<The signal to which the projection is (potentially) assigned clash-lib'The subject/scrutinee of the projection clash-libThe type of the result clash-libThe field to be projected7 clash-lib#HWType of the LHS of the let-binder clash-libId to assign the result to clash-libApplied DataCon clash-libDataCon Arguments clash-lib@Returned expression and a list of generate BlackBox declarations8 clash-lib(Treat BlackBox expression as declaration clash-libId to assign the result to clash-lib!Type of the LHS of the let-binder clash-lib Term to convert to an expression clash-lib@Returned expression and a list of generate BlackBox declarations9 clash-libName of the function  clash-libGlobal binders clash-libAll the TopEntities clash-libPrimitive definitions clash-lib TyCon cache clash-lib#Hardcoded Type -> HWType translator clash-libSet of collected data-files clash-libIntWordInteger bit-width clash-libvalid identifiers clash-libextend valid identifiers  clash-libSeen components  clash-libHDL dir  clash-lib Name of the  topEntity  clash-libGlobal binders clash-libTopEntity annotations clash-libPrimitive Definitions clash-lib TyCon cache clash-lib"Hardcode Type -> HWType translator clash-libSet of collected data-files clash-libIntWordInteger bit-width clash-libvalid identifiers clash-libextend valid identifiers  clash-libSeen components  clash-libHDL dir  clash-lib Action to run clash-libName of the function clash-libCorresponding term clash-libLHS of the let-binder clash-libRHS of the let-binder clash-libLHS of the let-binder clash-libName of the applied function clash-libFunction arguments34567899435867#W(C) 2015-2016, University of Twente, 2016 , Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None% clash-libReplace an application of the Clash.Sized.Vector.zipWith) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.zipWith clash-libReplace an application of the Clash.Sized.Vector.map) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.map clash-libReplace an application of the Clash.Sized.Vector.imap) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.imap clash-libReplace an application of the Clash.Sized.Vector.traverse#) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.traverse# clash-libCreate the traversable vectore.g. for a length '2' input vector, we get *(:>) <$> x0 <*> ((:>) <$> x1 <*> pure Nil) clash-libReplace an application of the Clash.Sized.Vector.foldr) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.foldr clash-libReplace an application of the Clash.Sized.Vector.fold) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.fold clash-libReplace an application of the Clash.Sized.Vector.dfold) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.dfold clash-libReplace an application of the Clash.Sized.Vector.head) primitive on vectors of a known length n4, by a projection of the first element of a vector. clash-libReplace 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. clash-libReplace an application of the Clash.Sized.Vector.last) primitive on vectors of a known length n3, by a projection of the last element of a vector. clash-libReplace 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. clash-libReplace an application of the Clash.Sized.Vector.(++)) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.(++) clash-libReplace an application of the Clash.Sized.Vector.unconcat) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.unconcat clash-libReplace an application of the Clash.Sized.Vector.transpose) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.transpose clash-libReplace an application of the Clash.Sized.Vector.dtfold) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.dtfold clash-libReplace an application of the Clash.Sized.RTree.tdfold& primitive on trees of a known depth n3, by the fully unrolled recursive "definition" of Clash.Sized.RTree.tdfold clash-libLength of the vector(s) clash-libType of the lhs of the function clash-libType of the rhs of the function clash-lib"Type of the result of the function clash-libThe zipWith'd functions clash-libThe 1st vector argument clash-libThe 2nd vector argument clash-libLength of the vector clash-libArgument type of the function clash-libResult type of the function clash-libThe map'd function clash-libThe map'd over vector clash-libLength of the vector clash-libArgument type of the function clash-libResult type of the function clash-libThe imap'd function clash-libThe imap'd over vector clash-libLength of the vector clash-lib#Element type of the argument vector clash-libThe type of the applicative clash-lib!Element type of the result vector clash-libThe  Applicative dictionary clash-libThe function to traverse with clash-libThe argument vector  clash-libVec tcon clash-libNil con clash-libCons con clash-lib term clash-lib term clash-libk term clash-libb ty clash-libLength of the vector clash-libElements of the vector clash-libLength of the vector clash-lib#Element type of the argument vector clash-libThe function to fold with clash-libThe starting value clash-libThe argument vector clash-libLength of the vector clash-lib#Element type of the argument vector clash-libThe function to fold with clash-libThe argument vector clash-libLength of the vector clash-lib#Element type of the argument vector clash-libFunction to fold with clash-libStarting value clash-libThe vector to fold clash-libLength of the vector clash-libElement type of the vector clash-libThe argument vector clash-libLength of the vector clash-libElement type of the vector clash-libThe argument vector clash-libLength of the vector clash-libElement type of the vector clash-libThe argument vector clash-libLength of the vector clash-libElement type of the vector clash-libThe argument vector clash-libLength of the LHS arg clash-libLenght of the RHS arg clash-libElement type of the vectors clash-libThe LHS argument clash-libThe RHS argument clash-libLength of the result vector clash-lib+Length of the elements of the result vector clash-lib Element type clash-libArgument vector clash-libLength of the result vector clash-lib+Length of the elements of the result vector clash-lib Element type clash-libArgument vector clash-libLength of the vector clash-lib#Element type of the argument vector clash-lib!Function to convert elements with clash-lib!Function to combine branches with clash-libThe vector to fold clash-libDepth of the tree clash-lib!Element type of the argument tree clash-lib!Function to convert elements with clash-lib!Function to combine branches with clash-libThe tree to fold clash-libDepth of the tree clash-lib Element type clash-lib Result type clash-libElement$#(C) 2015-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%35LNӒ  clash-lib Test if a l collected from an expression indicates that application of a global binder is disjoint: occur in separate branches of a case-expression.m clash-lib7Test if all elements in a list are equal to each other. clash-libCollect ls for (potentially) disjoint applications of globals out of an expression. Also substitute truly disjoint applications of globals by a reference to a lifted out application.n clash-libCollect ls for (potentially) disjoint applications of globals out of a list of application arguments. Also substitute truly disjoint applications of globals by a reference to a lifted out application.o clash-libCollect ls for (potentially) disjoint applications of globals out of a list of alternatives. Also substitute truly disjoint applications of globals by a reference to a lifted out application.p clash-libCollect ls for (potentially) disjoint applications of globals out of a list of let-bindings. Also substitute truly disjoint applications of globals by a reference to a lifted out application. clash-libGiven a case-tree corresponding to a disjoint interesting "term-in-a- function-position", return a let-expression: where the let-binding holds a case-expression selecting between the uncommon arguments of the case-tree, and the body is an application of the term applied to the common arguments of the case tree, and projections of let-binding corresponding to the uncommon argument positions.q clash-lib{Create a single selector for all the representable uncommon arguments by selecting between tuples. This selector is only (rj) created when the number of representable uncommmon arguments is larger than one, otherwise it is not ().It also returns:<For all the non-representable uncommon arguments: a selectorFor all the representable uncommon arguments: a projection out of the tuple created by the larger selector. If this larger selector does not exist, a single selector is created for the single representable uncommon argument.s clash-libaCreate a list of arguments given a map of positions to common arguments, and a list of argumentst clash-libWCreate a case-expression that selects between the uncommon arguments given a case-treeu clash-lib_Determine if a term in a function position is interesting to lift out of of a case-expression.]This holds for all global functions, and certain primitives. Currently those primitives are:$All non-power-of-two multiplications<All division-like operations with a non-power-of-two divisor  clash-libSSubstitution of (applications of) a global binder by a reference to a lifted term. clash-lib#List of already seen global binders clash-libThe expressionn clash-libSSubstitution of (applications of) a global binder by a reference to a lifted term. clash-lib#List of already seen global binders clash-libThe list of argumentso clash-libSSubstitution of (applications of) a global binder by a reference to a lifted term. clash-lib#List of already seen global binders clash-libThe subject term clash-libThe list of alternativesp clash-libSSubstitution of (applications of) a global binder by a reference to a lifted term. clash-lib#List of already seen global binders clash-libThe list let-bindings clash-libCurrent free variables. clash-lib5Case-tree of arguments belonging to the applied term.q clash-libTypes of the argumentss clash-libCurrent position clash-lib$map from position to common argument clash-lib$(projections for) uncommon argumentst clash-libType of the alternatives clash-lib"DataCon to pack multiple arguments clash-libTypes of the arguments clash-libCaseTree of argumentsu clash-libin scope clash-lib Evaluator clash-libTerm in function position clash-lib Arguments%(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%]6p clash-lib"Specialize functions on their type clash-lib8Specialize functions on their non-representable argument clash-lib@Lift the let-bindings out of the subject of a Case-decomposition clash-libVMove a Case-decomposition from the subject of a Case-decomposition to the alternatives clash-lib\Inline function with a non-representable result if it's the subject of a Case-decomposition clash-libSpecialize a Case-decomposition (replace by the RHS of an alternative) if the subject is (an application of) a DataCon; or if there is only a single alternative that doesn't reference variables bound by the pattern. clash-liblBring an application of a DataCon or Primitive in ANF, when the argument is is considered non-representable clash-libkEnsure that top-level lambda's eventually bind a let-expression of which the body is a variable-reference. clash-libRemove unused let-bindings clash-libxInline let-bindings when the RHS is either a local variable reference or is constant (except clock or reset generators) clash-lib/Push a cast over a case into it's alternatives. clash-lib(Push a cast over a Letrec into it's body clash-lib:Push cast over an argument to a funtion into that function@This is done by specializing on the casted argument. Example: ) y = f (cast a) where f x = g x  transforms to: 6 y = f' a where f' x' = (x -> g x) (cast x')  clash-lib&Only inline casts that just contain a G, because these are guaranteed work-free. These are the result of the  transformation. clash-libTEliminate two back to back casts where the type going in and coming out are the same 0 (cast :: b -> a) $ (cast :: a -> b) x ==> x  clash-libDMake a cast work-free by splitting the work of to a separate binding 9let x = cast (f a b) ==> let x = cast x' x' = f a b  clash-libUInline work-free functions, i.e. fully applied functions that evaluate to a constant clash-libInline small functions clash-libeSpecialise functions on arguments which are constant, except when they are clock or reset generators clash-lib7Propagate arguments of application inwards; except for ' where the argument becomes let-bound. clash-lib3Flatten ridiculous case-statements generated by GHC+For case-statements in haskell of the form: Rf :: Unsigned 4 -> Unsigned 4 f x = case x of 0 -> 3 1 -> 2 2 -> 1 3 -> 0 #GHC generates Core that looks like: f = (x :: Unsigned 4) -> case x == fromInteger 3 of False -> case x == fromInteger 2 of False -> case x == fromInteger 1 of False -> case x == fromInteger 0 of False -> error "incomplete case" True -> fromInteger 3 True -> fromInteger 2 True -> fromInteger 1 True -> fromInteger 0 ]Which would result in a priority decoder circuit where a normal decoder circuit was desired.;This transformation transforms the above Core to the saner: f = (x :: Unsigned 4) -> case x of _ -> error "incomplete case" 0 -> fromInteger 3 1 -> fromInteger 2 2 -> fromInteger 1 3 -> fromInteger 0  clash-liblTurn an expression into a modified ANF-form. As opposed to standard ANF, constants do not become let-bound. clash-lib9Eta-expand top-level lambda's (DON'T use in a traversal!) clash-libTurn a normalized recursive function, where the recursive calls only pass along the unchanged original arguments, into let-recursive function. This means that all recursive calls are replaced by the same variable reference as found in the body of the top-level let-expression. clash-lib+Inline a function with functional arguments clash-libDSimplified CSE, only works on let-bindings, works from top to bottom clash-libReplace primitives by their "definition" if they would lead to let-bindings with a non-representable type when a function is in ANF. This happens for example when Clash.Size.Vector.map consumes or produces a vector of non-representable elements.Basically what this transformation does is replace a primitive the completely unrolled recursive definition that it represents. e.g. 8zipWith ($) (xs :: Vec 2 (Int -> Int)) (ys :: Vec 2 Int)is replaced by: let (x0 :: (Int -> Int)) = case xs of (:>) _ x xr -> x (xr0 :: Vec 1 (Int -> Int)) = case xs of (:>) _ x xr -> xr (x1 :: (Int -> Int)( = case xr0 of (:>) _ x xr -> x (y0 :: Int) = case ys of (:>) _ y yr -> y (yr0 :: Vec 1 Int) = case ys of (:>) _ y yr -> xr (y1 :: Int = case yr0 of (:>) _ y yr -> y in (($) x0 y0 :> ($) x1 y1 :> Nil)3Currently, it only handles the following functions: Clash.Sized.Vector.mapClash.Sized.Vector.zipWithClash.Sized.Vector.traverse#Clash.Sized.Vector.foldrClash.Sized.Vector.foldClash.Sized.Vector.dfoldClash.Sized.Vector.(++)Clash.Sized.Vector.headClash.Sized.Vector.tailClash.Sized.Vector.unconcatClash.Sized.Vector.transposeClash.Sized.Vector.replicateClash.Sized.Vector.dtfold clash-libaThis transformation lifts applications of global binders out of alternatives of case-statements.e.g. It converts: /case x of A -> f 3 y B -> f x x C -> h x into: let f_arg0 = case x of {A -> 3; B -> x} f_arg1 = case x of {A -> y; B -> x} f_out = f f_arg0 f_arg1 in case x of A -> f_out B -> f_out C -> h x  clash-libTGiven a function in the desired normal form, inline all the following let-bindings:Let-bindings with an internal name that is only used once, where it binds: * a primitive that will be translated to an HDL expression (as opposed to a HDL declaration) * a projection case-expression (1 alternative) * a data constructor clash-libFlatten's letrecs after 0 sometimes exposes additional possibilities for {, which then introduces let-bindings in what should be ANF. This transformation flattens those nested let-bindings again.1NB: must only be called in the cleaning up phase.!!&#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None: clash-libNormalisation transformation clash-lib+Topdown traversal, stops upon first success'(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>None%\ clash-lib-Run a NormalizeSession in a given environment clash-lib7Rewrite a term according to the provided transformation clash-libiCheck whether the normalized bindings are non-recursive. Errors when one of the components is recursive. clash-lib`Perform general "clean up" of the normalized (non-recursive) function hierarchy. This includes:6Inlining functions that simply "wrap" another function clash-libClash's clock and reset domain annotations prevent most accidental meta-stability situations. That is, unless the developer uses the functions marked "unsafe", the type system will prevent things like illegal clock domain crossing, or improper use of asynchronous resets.oHowever, this all depends on clock and resets being unique. With explicit clocks and resets, it is possible to have multiple clock and reset arguments that are annotated with the same domain. If these arguments aren't connected to the same source, we can still get metastability due to either illegal clock domain crossing, or improper use of asynchronous resets.The following situations are reported: * There are 2 or more clock arguments in scope that have the same clock domain annotation. * There are 2 or more reset arguments in scope that have the same reset domain annotation, and at least one of them is an asynchronous reset.  clash-lib Level of debug messages to print clash-lib UniqueSupply clash-libGlobal Binders clash-lib#Hardcoded Type -> HWType translator clash-lib TyCon cache clash-libTuple TyCon cache clash-lib%Hardcoded evaluator (delta-reduction) clash-libPrimitive Definitions clash-lib=Map telling whether a components is part of a recursive group  clash-lib topEntities  clash-libNormalizeSession to run clash-libTransformation to apply clash-libTerm to transform clash-libList of normalized binders clash-libVisited clash-libGlobal binders clash-libRoot of the call graph((C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , QBayLogic, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij <christiaan.baaij@gmail.com>NoneNVZz clash-lib7Create a set of target HDL files for a set of functions clash-lib(Pretty print Components to HDL Documents clash-libPrepares the directory for writing HDL files. This means creating the dir if it does not exist and removing all existing .hdl files from it. clash-lib(Writes a HDL file to the given directory clash-lib/Get all the terms corresponding to a call graph clash-libNormalize a complete hierarchy clash-libSet of functions clash-lib Primitive / BlackBox Definitions clash-lib TyCon cache clash-libTuple TyCon cache clash-lib Hardcoded  ->  translator clash-lib%Hardcoded evaluator (delta-reduction) clash-libHtopEntity bndr + (maybe) TopEntity annotation + (maybe) testBench bndr clash-lib5Debug information level for the normalization process clash-libBackend clash-libModule hierarchy root clash-libList of components clash-lib Top component clash-lib^Name of the manifest file + Either: * Left manifest: Only write/update the hashes of the manifest/ * Right manifest: Update all fields of the manifest clash-lib<The pretty-printed HDL documents + The update manifest file clash-libRemove existing HDL files clash-lib File extension of the HDL files. clash-lib All bindings clash-libRoot of the call graph  clash-lib All bindings clash-libBlackBox HDL templates clash-lib TyCon cache clash-libTuple TyCon cache clash-lib Hardcoded  ->  translator clash-lib%Hardcoded evaluator (delta-reduction) clash-lib TopEntities clash-lib5Debug information level for the normalization process clash-lib Unique supply  clash-libroot of the hierarchyv9019:;9:<9:=9>?9>@90A9029BC9DEFGHFGIJKLMMNOPQRSTUVWXYZ[\]^_`abcdeJfghijklmnopqrstuvwxyz{|}~}              U                               !"#$%&'()*+,-./012 3 4 5 6 7 8 9 U :  ; < = > ? @ A B C D E F G H I J K L M N O P Q R STUVWXYZ[ \ ] ^ _ `  a b c d e f ` g h ] i j k l m n o p q r s t u v w x y z { | } ~                     T^     -/ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~FG   8  # !"#$%&.'(0)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ ` ` a b c d e f g h  i j j k l m n o p q r s t u + v w x y z { | }!~!!!!!!!!!!"""""""####################$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&'''''''''''''''((((((((**9:**      ,,,,,,,,,,,,,,,,,, ,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8/9/:/;/</=/>/?/@ABCDEFGHIJKLMNOPQRSTUV W X YZ[\]^_`abcdefghij_akbcd[\g]^_almn9:o$p$q$r$s$t$u9:v$w$x$yzclash-lib-0.99.2-inplace Clash.UtilClash.Core.NameClash.Driver.TypesClash.Netlist.BlackBox.TypesClash.Netlist.BlackBox.ParserClash.Netlist.IdClash.Primitives.TypesClash.Primitives.UtilClash.Core.TyConClash.Core.TermClash.Core.TypeClash.Core.VarClash.Core.DataConClash.Core.TysPrimClash.Core.LiteralClash.Core.SubstClash.Netlist.Types Clash.Backend Clash.NetlistClash.Core.FreeVarsClash.Core.PrettyClash.Core.UtilClash.Netlist.UtilClash.Netlist.BlackBox.UtilClash.Backend.VerilogClash.Backend.VHDLClash.Backend.SystemVerilogClash.Core.EvaluatorClash.Rewrite.TypesClash.Rewrite.UtilClash.Rewrite.CombinatorsClash.Normalize.TypesClash.Normalize.UtilClash.Netlist.BlackBox#Clash.Normalize.PrimitiveReductionsClash.Normalize.DECClash.Normalize.TransformationsClash.Normalize.StrategyClash.Normalize Clash.Driver!Clash.Annotations.TopEntity.ExtraData.Aeson.ExtraData.Semigroup.Monad.ExtraData.Text.Prettyprint.Doc.ExtraGHC.BasicTypes.ExtraGHC.SrcLoc.ExtraPaths_clash_lib Control.Arrowfirstsecond Data.List partition mapAccumL&Unbound.Generics.LocallyNameless.ExtraClash.Netlist.VHDLVHDLMbaseGHC.Base<*>pure Applicative Control.Monad<=<>=>*** Data.Functionon Data.Functor<$>ghcSrcLoc noSrcSpanSrcSpanHdlSynVivadoOtherDeclElementCDOINLVarSymTypTypMErrTypElemCompName IncludeName IndexTypeSizeLengthDepthFilePathGenIFAndIW64BVSelIsLitIsVarIsGatedIsSyncStrCmp OutputWireRegVarsGenSymSigDBlackBoxTemplate $fEqHdlSyn $fShowHdlSyn $fReadHdlSyn $fShowElement $fShowDeclrunParseIdTypeBasicExtended mkBasicId'stripDollarPrefixes PrimitiveBlackBoxname outputReglibraryimportsincludetemplateprimTypePrimMap$fFromJSONPrimitive$fShowPrimitiveLlens-4.16.1-b73306de30e37338d78eebe88b1f4de46d174c907753ae8dca26f38c6204be7cControl.Lens.TH makeLenses MonadUnique getUniqueMcurLoc makeCached makeCachedT3 makeCachedT3S liftStatefirstMsecondMcombineMtraceIf partitionM mapAccumLMdot ifThenElse<:> indexMaybe indexNote splitAtListclashLibVersionflogBaseclogBase$fMonadUniqueStateTparsePrimitivegeneratePrimMapNameSortUserSystemInternalOccNameNamenameSortnameOccnameLoc $fAlphaName $fOrdName$fEqName $fEqNameSort $fOrdNameSort$fShowNameSort$fGenericNameSort$fNFDataNameSort$fHashableNameSort $fShowName $fGenericName $fNFDataName$fHashableName name2String name2Integerstring2OccNamestring2SystemNamestring2InternalName makeOccNamemakeSystemName coerceName appendToName $fSubstbName$fAlphaNameSort TyConOccName TyConNameTyConTmNameTerm KiOccNameKiName TyOccNameTyNameKindType mkTyConTyTyVarIdvarNamevarKindvarType modifyVarName$fSubstTypeVar$fSubstTermVar $fAlphaVar$fEqVar $fShowVar $fGenericVar $fNFDataVar $fHashableVarDcNameConTagDataConMkDatadcNamedcTagdcType dcUnivTyVars dcExtTyVarsdcArgTysdataConInstArgTys$fSubstaDataCon$fAlphaDataCon $fOrdDataCon $fEqDataCon $fShowDataCon$fGenericDataCon$fNFDataDataCon$fHashableDataCon AlgTyConRhs DataTyConNewTyCondataConsdataCon ntEtadRhsTyConMapAlgTyConFunTyCon PrimTyConSuperKindTyCon tyConName tyConKind tyConArityalgTcRhs tyConSubst mkKindTyConisTupleTyConLike tyConDataCons $fAlphaTyCon $fOrdTyCon $fEqTyCon $fShowTyCon$fShowAlgTyConRhs$fGenericAlgTyConRhs$fNFDataAlgTyConRhs$fAlphaAlgTyConRhs$fGenericTyCon $fNFDataTyConliftedTypeKind typeNatKindtypeSymbolKind intPrimTy integerPrimTy charPrimTy stringPrimTy voidPrimTy wordPrimTy int64PrimTy word64PrimTy floatPrimTy doublePrimTy naturalPrimTy tysPrimMapLiteralIntegerLiteral IntLiteral WordLiteral Int64Literal Word64Literal StringLiteral FloatLiteral DoubleLiteral CharLiteralNaturalLiteral literalType$fSubstaLiteral$fAlphaLiteral $fEqLiteral $fOrdLiteral $fShowLiteral$fGenericLiteral$fNFDataLiteral$fHashableLiteralAltPatDataPatLitPat DefaultPat LetBinding TmOccNameDataPrimLamTyLamAppTyAppLetrecCaseCast$fSubstTypePat$fSubstTypeTerm$fSubstTermTerm$fSubstTermPat $fAlphaTerm $fOrdTerm$fEqTerm$fEqPat $fShowPat $fGenericPat $fNFDataPat $fAlphaPat $fHashablePat $fShowTerm $fGenericTerm $fNFDataTerm$fHashableTermsubstTyssubstTy substKindWith substTyInTm substTysinTmsubstTmsubstTms substBndr KindOrTypeLitTyNumTySymTyConstTyArrowTypeViewFunTyTyConApp OtherTypeVarTyForAllTyAppTytyViewcoreViewmkFunTy mkTyConAppsplitTyConAppMtypeKindisPolyTy splitFunTy splitFunTyssplitFunForallTysplitCoreFunForallTy isPolyFunTyisPolyFunCoreTyisFunTy applyFunTyapplyTy findFunSubstreduceTypeFamily undefinedTy isIntegerTy normalizeType$fSubstaConstTy $fSubstaLitTy $fOrdType$fEqType$fSubstTypeType$fSubstTermType $fAlphaType $fShowConstTy$fGenericConstTy$fNFDataConstTy$fAlphaConstTy$fHashableConstTy $fShowLitTy$fGenericLitTy $fNFDataLitTy $fAlphaLitTy$fHashableLitTy $fShowType $fGenericType $fNFDataType$fHashableType$fShowTypeViewManifest manifestHash portInNames portInTypes portOutNames portOutTypescomponentNamesClashException ClashOptsopt_inlineLimit opt_specLimitopt_inlineFunctionLimitopt_inlineConstantLimit opt_dbgLevel opt_cachehdl opt_cleanhdl opt_intWidth opt_hdlDir opt_hdlSynopt_errorExtraopt_floatSupport opt_allowZeroopt_importPaths DebugLevel DebugNone DebugFinal DebugName DebugAppliedDebugAll BindingMap$fExceptionClashException$fShowClashException$fEqDebugLevel$fOrdDebugLevel$fReadDebugLevel$fShowManifest$fReadManifestBlackBoxContextContextbbResultbbInputs bbFunctions bbQsysIncNameBitHUZNumLitBitLitBoolLitVecLit StringLitExpr IdentifierDataTag BlackBoxEConvBVModifierIndexedDC VecAppend RTreeAppendNested PortDirectionInOut WireOrRegWireReg Declaration AssignmentCondAssignmentInstDecl BlackBoxDNetDecl'HWTypeVoidStringBool BitVectorIndexSignedUnsignedVectorRTreeSumProductSPClockReset Component componentNameinputsoutputs declarations NetlistState _bindings _varCount _components _primitives_typeTranslator_tcCache _curCompNm _dataFiles _intWidth_mkIdentifierFn_extendIdentifierFn_seenIds _seenComps_componentNames_topEntityAnns_hdlDir NetlistMonad runNetlistNetDeclemptyBBContext$fHashableResetKind$fHashableClockKind$fNFDataHWType$fHashableHWType$fNFDataWireOrReg$fNFDataDeclaration$fNFDataComponent $fEqHWType $fOrdHWType $fShowHWType$fGenericHWType$fShowWireOrReg$fGenericWireOrReg$fShowPortDirection$fShowModifier$fEqBit $fShowBit$fShowBlackBoxContext $fShowExpr$fShowDeclaration$fShowComponent$fFunctorNetlistMonad$fMonadNetlistMonad$fApplicativeNetlistMonad$fMonadStateNetlistMonad$fFreshNetlistMonad$fMonadIONetlistMonadbindings components curCompNm dataFilesextendIdentifierFnhdlDirintWidthmkIdentifierFn primitives seenCompsseenIdstcCache topEntityAnnstypeTranslatorvarCountBackend initBackendhdlKindprimDirs extension extractTypesgenHDL mkTyPackagehdlTypehdlTypeErrValue hdlTypeMark hdlRecSelhdlSiggenStmtinstexpriwWidthtoBVfromBVhdlSyn mkIdentifierextendIdentifier setModName setSrcSpan getSrcSpan blockDeclunextend addInclude addLibraries addImportsUsageExternalModNamenestMescapeTemplatemkDeclarations mkNetDecl mkSelection mkProjectionmkDcApplicationmkExpr genComponent typeFreeVars termFreeIdstermFreeTyVarsPrettypprpprPrecshowDoc$fPrettyLiteral$fPrettyDataCon $fPrettyVar $fPrettyTerm $fPrettyLitTy $fPrettyTyCon $fPrettyVar0 $fPrettyType $fPrettyText $fPretty(,) $fPretty[] $fPrettyName $fPrettyName0 $fPrettyPat $fEqTypePrec $fOrdTypePrecDeltaGammatermType collectArgs collectBndrsapplyTypeToArgspatIdsmkTyVarmkId mkAbstractionmkTyLamsmkLamsmkAppsmkTmAppsmkTyAppsisFun isPolyFunisLamisLetisVarisConisPrimidToVarvarToIdtermSizemkVec appendToVec extractElems extractTElemsmkRTree isSignalTypeisClockOrReset tyNatSizeisVoidsplitNormalizedunsafeCoreTypeToHWTypeunsafeCoreTypeToHWTypeMcoreTypeToHWTypeMsynchronizedClkcoreTypeToHWTypemkADT isRecursiveTyrepresentableTypetypeSizeconSize typeLength termHWType termHWTypeMmkUniqueNormalizedmkUniqueArgumentsmkUniqueResultidToPortrepNamemkUniquemkUniqueIdentifierpreserveVarEnv dcToLiteral extendPorts appendNumberportNameappendIdentifieruniquePortNamemkInput filterVoid mkVectorChain mkRTreeChaingenComponentNamemkOutputmkTopUnWrapperargBVresBVdoConv mkTopInput mkTopOutputconcatPortDecls3verifyBlackBoxContextextractLiteralssetSym setCompNamefindAndSetDataFilesrenderFilePathrenderTemplaterenderBlackBox setSimpleVar renderElem parseFailidToExprlineToIdentifier lineToType renderTag exprToTextprettyBlackBox prettyElem usedArguments VerilogState$fBackendVerilogState VHDLState$fBackendVHDLStateSystemVerilogState$fBackendSystemVerilogState PrimEvaluatorStateValueLambdaTyLambdaLitPrimVal StackFrameUpdateApply Instantiate PrimApply ScrutiniseStackPureHeapHeapwhnf'whnfisScrut unwindStackstep newLetBindingnewLetBindings'mkAbstrforceunwindupdate valToTermtoVartoTypeapply instantiateprimop scrutinisematchLitsubstAltallocateletSubst uniqueInHeap$fPrettyStackFrame $fShowHeap $fShowValue$fShowStackFrame RewriteState_transformCounter _uniqSupply_curFun _nameCounter_extra CoreContextAppFunAppArgTyAppCLetBodyLamBody TyLamBodyCaseAlt CaseScrutCastBody$fEqCoreContext$fShowCoreContext RewriteEnv _dbgLevel _tupleTcCache _evaluator _allowZero _topEntitiescurFunextra nameCountertransformCounter uniqSupplyRewrite Transform RewriteMonadRrunR allowZerodbgLevel evaluator topEntities tupleTcCache$fMonadFixRewriteMonad#$fMonadReaderRewriteEnvRewriteMonad$fMonadWriterAnyRewriteMonad$fMonadUniqueRewriteMonad$fFreshRewriteMonad$$fMonadStateRewriteStateRewriteMonad$fMonadRewriteMonad$fApplicativeRewriteMonad$fFunctorRewriteMonad zoomExtra runRewriterunRewriteSession setChangedchanged contextEnvclosestLetBinder mkDerivedNamemkEnv mkTmBinderFor mkBinderFor mkInternalVar inlineBinders isJoinPointIn tailCalls isVoidWrappersubstituteBinders localFreeIdsinlineOrLiftBinders liftBinding mkFunction addGlobalBindcloneVar isLocalVarisUntranslatableisUntranslatableTypeisLambdaBodyCtxmkWildValBindermkSelectorCase specialise specialise'normalizeTermTypes normalizeIdspecArgBndrsAndVarsallR>->>-!->topdownRunsafeTopdownR bottomupRunsafeBottomupR!->>-!repeatRwhenR bottomupWhenRNormalizeState _normalized_specialisationCache_specialisationHistory_specialisationLimit_inlineHistory _inlineLimit_inlineFunctionLimit_inlineConstantLimit_recursiveComponentsTermClassification _function _primitive _selection NormRewriteNormalizeSessionNormalizeMonadinlineConstantLimitinlineFunctionLimit inlineHistory inlineLimit normalizedrecursiveComponentsspecialisationCachespecialisationHistoryspecialisationLimit$fShowTermClassificationfunction primitive selection CallGraphalreadyInlined addNewInlinespecializeNormisClosed isConstantisConstantNotClockResetisRecursiveBndr callGraphclassifyFunctionisCheapFunctionmkBlackBoxContextprepareBlackBox mkArgument mkPrimitive mkFunInputinstantiateCompNamecollectFilePaths genNetlistrunNetlistMonadgenNames genComponentTmkDeclarations'mkFunApp toSimpleVar reduceZipWith reduceMap reduceImapreduceTraverse mkTravVec reduceFoldr reduceFold reduceDFold reduceHead reduceTail reduceLast reduceInit reduceAppendreduceUnconcatreduceTransposereduceReplicate reduceDTFold reduceTFoldreduceTReplicate buildSNat isDisjointcollectGlobalsmkDisjointGroup $fEqCaseTree$fShowCaseTree$fFunctorCaseTree$fFoldableCaseTreeinlineOrLiftNonReptypeSpec nonRepSpeccaseLetcaseCase inlineNonRepcaseCon nonRepANFtopLetdeadCoderemoveUnusedExprbindConstantVarcaseCastletCast argCastSpec inlineCasteliminateCastCast splitCastWorkinlineWorkFree inlineSmall constantSpecappPropcaseFlatmakeANFetaExpansionTL recToLetRecinlineHO simpleCSE reduceConstreduceNonRepPrimdisjointExpressionConsolidation inlineCleanup flattenLet normalizationconstantPropgation topdownSucR innerMost applyManyCallTreeCLeafCBranchrunNormalization normalize normalize' rewriteExprcheckNonRecursive cleanupGraph mkCallTree stripArgs flattenNodeflattenCallTreecallTreeToListclockResetErrors generateHDL createHDL prepareDirwriteHDL copyDataFilescallGraphBindingsnormalizeEntity pBlackBoxDpElementpTextpTagDpDeclpOutputpInputpTagE brackets' pBlackBoxEpElemEpSigD genLineErr decodeOrErrNothingreplaceCommonEscapes genLineErr'Preducers-3.12.2-f5eecb37ce748724548efc30b4079e763f64db393e835dab85049ebad0ae444aData.Semigroup.MonadAction getActionMongetMonVprettyprinter-1.2.0.1-9c8fa66d93d25554dad17ba725d507fede5e3bc5df634e2f9b2be35800daa2e3"Data.Text.Prettyprint.Doc.Internal layoutCompact layoutPretty LayoutOptionslayoutPageWidth PageWidth UnboundedAvailablePerLine%Data.Text.Prettyprint.Doc.Render.Text renderLazyDoc layoutOneLine renderOneLineintintegercharlbracerbracecolonsemiequalscommalparenrparenspacebracketsbracestupled<+>vcathcatnestindentparensemptyDoc punctuate encloseSeplineline'softline softline'prettystringsquotesdquotesalignvsepisEmptyfillcolumnnestingversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameghc-prim GHC.TypesTruetySuperKindTyConNameliftedTypeKindTyConNametypeNatKindTyConNametypeSymbolKindTyConName tySuperKindtcliftedTypeKindtc typeNatKindtctypeSymbolKindtc intPrimTc integerPrimTc charPrimTc stringPrimTc voidPrimTc wordPrimTc int64PrimTc word64PrimTc floatPrimTc doublePrimTc naturalPrimTcnewTyConInstRhs isSuperKind splitTyAppMVerilogM _genDepth genVerilogverilogTypeMarkverilogTypeErrValueinst_modifierexpr__tyCache_tySeen _nameCache_hdlsyngenVHDL mkTyPackage_vhdlType vhdlTypeMarkvhdlTypeErrValueSystemVerilogMWunbound-generics-0.3.2-5cefa582bd50a389b4b8458ddf2c0669465820b5d42d9301586e9796380b5104&Unbound.Generics.LocallyNameless.FreshFreshfmapCaseTreeallEqualcollectGlobalsArgscollectGlobalsAltscollectGlobalsLbsdisJointSelProjJustmkDJArgsgenCaseinterestingToLift