h$)@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [ \ ] ^ _ ` 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 { | } ~                                                                                ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " # # # $ $ $ $ $ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & & & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ( ( ( ( ( ( ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +                                                                                                                                                                                                                                                                                                                        , , , , - - - - - - - - - - - - ----------------------------------------------------------------........//////////////////////////001111111123333334566666666667777777777778888888999999999999999999999999::;;;;;;;;;<<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????@ABCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEE========================FFFFFFFFFFFFFFFFFFFFFFGGGHHHHHHIIIIIJJKKKLLLLLLLLLLMMMMMMMMNNNNNNOOOOO000PPPPPPPPPPPPP::::::::::;;;;;;;;;QRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXNone&/02356789;<0@  clash-lib0Performs trace when first argument evaluates to   (C) 2020, QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V.  Safe-Inferred &/02356789;<4 # clash-libTool-specific configuration used by Edalize. Currently only tools which are supported by Clash are provided.* clash-libA subset of the file types recognized by Edalize. The supported formats are largely from IP-XACT 2014 (IEEE 1685-2014), although Edalize extends this with other types, e.g. QSYS.8Only file types which are generated by Clash are listed.+ clash-libUnknown file type., clash-lib VHDL source.- clash-libVerilog source.. clash-libSystemVerilog source./ clash-libTool Command Language source.0 clash-libQSys system source.1 clash-lib#Synopsys Design Constraints source.2 clash-libInformation about each file in the project. This does not include is_include_file or include_path, as these are not currently used by Clash.7 clash-libEDAM data structure to be given to an Edalize backend. This contains all information needed to generate a project scaffolding. Note that hooks and VPI modules are currently not specified by clash.1  !"#$%&'()*+,-./0123456789:;<=1789:;<23456*+,-./01#$%&'() !" =(C) 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<8X clash-lib>Compare two values using pointer equality. If that fails, use  to determine equality. Note that this function will only shortcut for values that are the same, but will always use  for values that differ.Values are evaluated to WHNF before comparison. This function can therefore not be used if any of its arguments is expected to be bottom.Y clash-libCompare two values using pointer equality. If that fails, use given function to determine equality. Note that this function will only shortcut for values that are the same, but will always use the given function for values that differ.Values are evaluated to WHNF before comparison. This function can therefore not be used if any of its arguments is expected to be bottom.XYXY >(C) 2019, QBayLogic B.V. 2013, Nikita VolkovBSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<9Z[\[Z\ None&/02356789;<;_ clash-lib A variant of Pretty that is not polymorphic on the type of annotations. This is needed to derive instances from Clash's pretty printer (PrettyPrec), which annotates documents with Clash-specific information and, therefore, fixes the type of annotations._`abcdeabcd_`e None &/02356789;<F+f clash-libSet of things that have a k=Invariant: they keys in the map are the uniques of the valuesg clash-libMap indexed by a h keyl clash-lib The empty mapm clash-lib Map with a single key-value pairn clash-libCheck whether the map is emptyo clash-libExtend the map with a new key-value pair. If the key already exists in the associated value will be overwrittenp clash-libExtend the map with a new key-value pair. If the key already exists in the associated value will be combined with the new value using the function providedq clash-libExtend the map with a list of key-value pairs. Positions with existing keys will be overwritten with the new valuesr clash-libLook up a value in the maps clash-libLike s,, but errors out when the key is not presentt clash-lib!Check whether a key is in the mapu clash-libCheck whether an element exists in the uniqmap based on a given kv clash-lib%Check whether a key is not in the mapw clash-lib;Derive a map where all the elements adhere to the predicatex clash-lib$Remove a key-value pair from the mapy clash-lib-Remove a list of key-value pairs from the mapz clash-lib!A (left-biased) union of two maps{ clash-libA union of two maps, key-value pairs with the same key will be merged using the given function| clash-lib#Get the difference between two maps} clash-lib*Convert a list of key-value pairs to a map~ clash-lib*Convert a map to a list of key-value pairs clash-lib)Extract the elements of a map into a list clash-lib,Apply a function to every element in the map clash-lib%Extract the keys of a map into a list clash-libApply a function to every element in the map. When the function returns $, the key-value pair will be removed clash-lib2Right-fold over a map using both the key and value clash-libM_None&/02356789;<M (C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>O9 clash-lib Term Literal  `(C) 2019,2021, QBayLogic B.VBSD2 (see the file LICENSE)$QBayLogic B.V None&/02356789;<Pa Safe-Inferred&/02356789;<PG (C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)$QBayLogic B.V. R9 9 6b(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;<S{c(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;<T(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789:;<>T(C) 2012-2016, University of Twente, 2017-2018, Google Inc. 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None%&'(/02356789:;<XT  clash-lib Type variable clash-lib Term variable clash-libVariables in CoreHW clash-libConstructor for type variables clash-libConstructor for term variables clash-lib6Invariant: forall x . varUniq x ~ nameUniq (varName x) clash-lib>Interal version of Clash.Annotations.SynthesisAttributes.Attr.Needed because Clash.Annotations.SynthesisAttributes.Attr uses the Symbol kind for names, which do not have a term-level representation clash-libChange the name of a variable clash-libMake a type variable clash-libMake a term variable(C) 2012-2016, University of Twente, 2017, Google Inc., 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>\  clash-libDataCon reference clash-lib:Syntactical position of the DataCon in the type definition clash-libData Constructor clash-libName of the DataCon clash-lib4Invariant: forall x . dcUniq x ~ nameUniq (dcName x) clash-lib+Syntactical position in the type definition clash-libType of the 'DataCon clash-libUniversally 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-libArgument strictness clash-libNames of fields. Used when data constructor is referring to a record type.(C) 2012-2016, University of Twente 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>a 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-libName of the TyCon clash-libKind of the TyCon clash-libNumber of type arguments clash-libDataCon definitions clash-libIs this a class dictionary? clash-libDataCon which is promoted 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 TyCond Safe-Inferred&/02356789;<bM#(C) 2012-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;<>i  clash-lib(A class that can generate unique numbers clash-libGet a new unique clash-libCreate a TH expression that returns the a formatted string containing the name of the module 4 is spliced into, and the line where it was spliced. clash-lib$Cache the result of a monadic action clash-lib-Cache the result of a monadic action using a g clash-lib-Cache the result of a monadic action using a  clash-libSame as  with last two arguments swapped clash-libUnsafe indexing, return a custom error message when indexing fails clash-lib*x y -> floor (logBase x y), x > 1 && y > 0 clash-lib,x y -> ceiling (logBase x y), x > 1 && y > 0 clash-libGet the package id of the type of a value >>> pkgIdFromTypeable (undefined :: TopEntity) "clash-prelude-0.99.3-64904d90747cb49e17166bbc86fec8678918e4ead3847193a395b258e680373c" clash-libLeft-biased choice on maybes clash-libTrigger warning? clash-lib File name clash-lib Line number clash-libMessage clash-libPass value (like trace) clash-lib%The key the action is associated with clash-lib)The Lens to the HashMap that is the cache clash-libThe action to cache clash-lib!Key the action is associated with clash-libLens to the cache clash-libAction to cache clash-lib!Key the action is associated with clash-libLens to the cache clash-libAction to cache clash-libError message to display clash-libIndex n clash-lib List to index clash-libError or element n clash-libError message to display clash-lib List to index clash-libIndex n clash-libError or element ne#(C) 2015-2016, University of TwenteBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;<o clash-libSee . A line map maps "virtual" lines to a range of "real" lines. E.g., a map of {0: (0, 3), 1: (4, 5)} would mean that line 0 in the virtual JSON (i.e., the one with newlines replaced) file map to lines 0 up to and including 3 in the original user-supplied one. clash-libAeson versions <1.5.0 accept unescaped newlines in JSON strings. This is in violation of RFC 7159. Aeson 1.5.0 fixes this bug. Unfortunately, "Clash JSON" files rely on the old behavior. This function replaces newlines (in strings) with their escaped variants. clash-lib/Pretty print part of json file related to error clash-libParse a ByteString according to the given JSON template. Throws exception if it fails. clash-libParse a ByteString according to the given JSON template. Throws exception if it fails. clash-lib"Path read from (for error message) clash-libBytestring to parse clash-lib"Path read from (for error message) clash-libBytestring to parse(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc. 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None! %&/02356789:;<>|& 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 above clash-lib Type variable clash-lib Type constant clash-libPolymorphic Type clash-libType Application clash-lib Type literal clash-lib9Annotated type, see Clash.Annotations.SynthesisAttributes clash-libAn easier view on typesNote [Arrow arguments]Clash' Arrow type can either have 2 or 4 arguments, depending on who created it. By default it has two arguments: the argument type of a function, and the result type of a function.So when do we have 4 arguments? When in Haskell/GHC land the arrow was unsaturated. This can happen in instance heads, or in the eta-reduced representation of newtypes. So what are those additional 2 arguments compared to the "normal" function type? They're the kinds of argument and result type. clash-libA view on types in which newtypes are transparent, the Signal type is transparent, and type functions are evaluated to WHNF (when possible).Strips away ALL layers. If no layers are found it returns the given type. 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". clash-lib3Make a function type of an argument and result type clash-libMake a TyCon Application out of a TyCon and a list of argument types clash-lib6Split a TyCon Application in a TyCon and its arguments clash-libIs a type polymorphic? clash-lib4Split a function type in an argument and result type clash-libSplit a poly-function type in a: list of type-binders and argument types, and the result type clash-libMake a polymorphic function type out of a result type and a list of quantifiers and function argument types clash-libSplit 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? clash-lib/Is a type a polymorphic or function type under ? clash-libExtract attributes from type. Will return an empty list if this is an AnnType with an empty list AND if this is not an AnnType at all. clash-libIs a type a function type? clash-libApply a function type to an argument type and get the result type clash-lib clash-lib6Normalize a type, looking through Signals and newtypes For example: %Signal a (Vec (6-1) (Unsigned (3+1))) normalizes to Vec 5 (Unsigned 4) clash-lib Result type clash-lib/List of quantifiers and function argument types//(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<~_(C) 2012-2016, University of Twente, 2017, Google Inc. 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789:;<>? clash-libTerm reference clash-libTerm representation in the CoreHW language: System F + LetRec + Case clash-lib A list of  CoreContext describes the complete navigation path from the top-level to a specific sub-expression. clash-libContext in which a term appears clash-lib#Function position of an application clash-libArgument position of an application. If this is an argument applied to a primitive, a tuple is defined containing (name of the primitive, #type args, #term args) 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-lib9Body of a TyLambda-term with the abstracted type-variable clash-lib;RHS of a case-alternative with the bound pattern on the LHS clash-libSubject of a case-decomposition clash-libBody of a Cast clash-libBody of a Tick clash-lib+Patterns in the LHS of a case-decomposition clash-libDatatype pattern, '[TyVar]' bind existentially-quantified type-variables of a DataCon clash-libLiteral pattern clash-libDefault pattern clash-libBinding in a LetRec construct clash-lib-Ignores its arguments, and outputs a constant clash-libNever adds any work clash-lib)Does work when the arguments are variable clash-libPerforms work regardless of whether the variables are constant or variable; these are things like clock or reset generators clash-libA more restrictive version of , where the value is the argument at the given position if all arguments for the given list of positions are also  clash-libPrimitive with multiple return values. Useful for primitives that cannot return their results as a single product type, due to limitation of synthesis tooling. It will be applied to its normal arguments, followed by the variables it should assign its results to.See: fg clash-lib>Tag to indicate which instance/register name modifier was used clash-lib Clash.Magic.prefixName clash-lib Clash.Magic.suffixName clash-lib Clash.Magic.suffixNameP clash-lib Clash.Magic.setName clash-lib=Source tick, will get added by GHC by running clash with `-g` clash-libModifier for naming module instantiations and registers, are added by the user by using the functions +Clash.Magic.[prefixName,suffixName,setName] clash-libDeduplicate, i.e. try to share expressions between multiple branches. clash-libDo not deduplicate, i.e. keep, an expression inside a case-alternative; do not try to share expressions between multiple branches. 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-libCase-expression: subject, type of alternatives, list of alternatives clash-lib$Cast a term from one type to another clash-libAnnotated term clash-lib6Get the list of term-binders out of a DataType pattern clash-lib6Abstract a term over a list of term and type variables clash-lib-Abstract a term over a list of type variables clash-lib(Abstract a term over a list of 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-lib1Is the Context a Lambda/Term-abstraction context? clash-libIs the Context a Tick context? clash-libLike + but removes all ticks from subexpressions. clash-lib>Split a (Type)Application in the applied term and it arguments clash-libSplit a (Type)Abstraction in the bound variables and the abstracted term clash-libGiven a function application, find the primitive it's applied. Yields Nothing if given term is not an application or if it is not a primitive. clash-lib1Partition ticks in source ticks and nameMod ticks clash-libVisit all terms in a term, testing it with a predicate, and returning a list of predicate yields. clash-libMake a term variable out of a variable reference or ticked variable reference clash-libFunction application clash-libIf Term& was a primitive: (name of primitive,  type args,  term args) clash-lib(source ticks, nameMod ticks)(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd, 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<y0 clash-libComponent instantiation hole. First argument indicates which function argument to instantiate. Third argument corresponds to output and input assignments, where the first element is the output assignment, and the subsequent elements are the consecutive input assignments.The 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. If you extend this list, make sure to update the following functions:'Clash.Netlist.BlackBox.Types.prettyElem'Clash.Netlist.BlackBox.Types.renderElem&Clash.Netlist.BlackBox.Types.renderTag#Clash.Netlist.BlackBox.Types.setSym-Clash.Netlist.BlackBox.Types.getUsedArguments*Clash.Netlist.BlackBox.Types.usedVariables2Clash.Netlist.BlackBox.Types.verifyBlackBoxContext(Clash.Netlist.BlackBox.Types.walkElement clash-lib*Dumps given text without processing in HDL clash-libComponent instantiation hole clash-lib Output hole; clash-lib Input hole clash-libLike Arg, but its first argument is the scoping level. For use in in generated code only. clash-lib,Like Arg, but input hole must be a constant. clash-lib*Like Arg, but input hole must be a literal clash-lib Name hole clash-libLike Arg but only insert variable reference (creating an assignment elsewhere if necessary). clash-lib Symbol hole clash-libType declaration hole clash-libType root hole clash-libError value hole clash-lib+Select element type from a vector-like type clash-libHole for the name of the component in which the blackbox is instantiated clash-libIndex data type hole, the field is the (exclusive) maximum index clash-libSize of a type hole clash-libLength of a vector-like hole clash-libDepth of a tree hole clash-lib!Max index into a vector-like type clash-lib*Hole containing a filepath for a data file clash-libCreate data file  HOLE0 with contents HOLE1 clash-libHole marking beginning (True) or end (False) of a generative construct clash-libHole indicating whether IntWordInteger are 64-Bit clash-libCompare less-or-equal 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 type clash-lib/Whether a domain's reset lines are synchronous. clash-libTag of a domain. clash-libPeriod of a domain. clash-lib#Longest period of all known domains clash-lib7Test active edge of memory elements in a certain domain clash-libWhether a domain's reset lines are synchronous. Errors if not applied to a KnownDomain. clash-libWhether given enable line is active. More specifically, whether the enable line is NOT set to a constant . clash-libWhether argument is undefined. E.g., an XException, error call, removed argument, or primitive that is undefined. This template tag will always return 0 (False) if `-fclash-aggressive-x-optimization-blackboxes` is NOT set. clash-libRepeat  hole n times clash-lib Evaluate  hole but swallow output clash-lib The "context name", name set by hi-, defaults to the name of the closest binder clash-libA BlackBox Template is a List of Elements TODO: Add name of function for better error messages clash-libA BlackBox function generates a blackbox template, given the inputs and result type of the function it should provide a blackbox for. This is useful when having a need for blackbox functions, ... TODO: docs clash-libSee Clash.Primitives.Types.BlackBox for documentation on this record's fields. (They are intentionally renamed to prevent name clashes.) clash-libWhether this primitive should be rendered when its result type is void. Defaults to . clash-lib,Render blackbox, even if result type is void clash-libDon't render blackbox result type is void. Default for all blackboxes. clash-libUse this value in your blackbox template function if you do want to accept the defaults as documented in Clash.Primitives.Types.BlackBox. clash-lib0Argument position of the function to instantiate clash-libSubposition of function: blackboxes can request multiple instances to be rendered of their given functions. This subposition indicates the nth function instance to be rendered (zero-indexed).This is a hack: the proper solution would postpone rendering the function until the very last moment. The blackbox language has no way to indicate the subposition, and every ~INST will default its subposition to zero. Haskell blackboxes can use this data type. clash-lib (name of signal, type of signal) clash-libIndicates whether caller needs a declaration. If set, the function is still free to return an expression, but the caller will convert it to a declaration. clash-libName of primitive clash-lib Arguments clash-lib Result types(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd 2018 , Google Inc. 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None %&/02356789:;<> clash-libExternally defined primitive clash-libPrimitive template written in a Clash specific templating language clash-libPrimitive template rendered by a Haskell function (given as raw source code) clash-libA primitive that carries additional information. These are "real" primitives, hardcoded in the compiler. For example:  mapSignal in GHC2Core.coreToTerm. clash-libName of the primitive clash-lib9Whether the primitive does any work, i.e. takes chip area clash-libWhether this primitive should be rendered when its result type is void. Defaults to . clash-libWether this blackbox assigns its results to multiple variables. See fg clash-lib6Whether this results in an expression or a declaration clash-libA warning to be outputted when the primitive is instantiated. This is intended to be used as a warning for primitives that are not synthesizable, but may also be used for other purposes. clash-lib-Verilog only: whether the result should be a reg(True) or wire (False); when not specified in the  .primitives" file, the value will default to False (i.e. wire). clash-libVHDL only: add library! declarations for the given names clash-libVHDL only: add use! declarations for the given names clash-libIndicates how often a function will be instantiated in a blackbox. For example, consider the following higher-order function that creates a tree structure:%fold :: (a -> a -> a) -> Vec n a -> aIn order to generate HDL for an instance of fold we need log2(n) calls to the first argument, `a -> a -> a` (plus a few more if n is not a power of two). Note that this only targets multiple textual instances of the function. If you can generate the HDL using a for-loop and only need to call ~INST once, you don't have to worry about this option. See the blackbox for jk for an example of this.Right now, option can only be generated by BlackBoxHaskell. It cannot be used within JSON primitives. To see how to use this, see the Haskell blackbox for jl. clash-libCreate files to be included with the generated primitive. The fields are ((name, extension), content), where content is a template of the file Defaults to [] when not specified in the  .primitives file clash-lib0(Maybe) Control the generated name of the result clash-lib8(Maybe) Control the initial/power-up value of the result clash-libUsed to indiciate type of template (declaration or expression). Will be filled with Template or an Either decl expr. clash-libArguments used by blackbox. Used to remove arguments during normalization. clash-libHolds blackbox function and its hash, (Int, BlackBoxFunction), in a CompiledPrimitive. clash-libAdditional information clash-lib=Data type to indicate what arguments are in use by a BlackBox clash-libOnly these are used clash-libAll but these are used clash-lib,Template source stored in file on filesystem clash-libTemplate stored inline clash-libA BBFN is a parsed version of a fully qualified function name. It is guaranteed to have at least one module name which is not Main. clash-libA PrimMap maps primitive names to a  Primitive clash-libA compiled primitive has compiled all templates and functions from its ResolvedPrimitive counterpart. The Int in the tuple is a hash of the (uncompiled) BlackBoxFunction. clash-libA parsed primitive does not contain pointers to filesystem files anymore, but holds uncompiled BlackBoxTemplates and BlackBoxFunctions. clash-lib9An unresolved primitive still contains pointers to files.,,(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd, 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;< 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)(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<>  clash-lib'PrettyPrec printing Show-like typeclass clash-libClash's specialized Doc type holds metadata of type ClashAnnotation. clash-lib&Specific places in the program syntax. clash-lib+Annotations carried on pretty-printed code. clash-lib)marking navigation to a different context clash-lib!marking a specific sort of syntax clash-libOptions for the pretty-printer, controlling which elements to hide. clash-lib%whether to display unique identifiers clash-lib#whether to display type information clash-lib$whether to display module qualifiers clash-libwhether to display ticks clash-lib$Print a PrettyPrec thing to a StringNone &/02356789:;<>Ӕ7 clash-lib-Rename environment for e.g. alpha equivalence!When going under binders for e.g.  x -> e1 aeq y -> e2 We want to rename [x -> y] or [y -> x]8, but we have to pick a binder that is neither free in e1 nor e2 or we risk accidental capture.So we must maintain: A renaming for the left termA renaming for the right termA set of in scope variables clash-lib/Set of variables that is in scope at some pointThe  is a kind of hash-value used to generate new uniques. It should never be zeroSee "Secrets of the Glasgow Haskell Compiler inliner" Section 3.2 for the motivation clash-libSet of variables clash-libMap indexed by variables clash-lib Empty map clash-lib3Environment containing a single variable-value pair clash-lib%Look up a value based on the variable clash-lib0Lookup a value based on the unique of a variable clash-lib$Lookup a value based on the variable+Errors out when the variable is not present clash-lib1Remove a variable-value pair from the environment clash-lib:Remove a list of variable-value pairs from the environment clash-libAdd a variable-value pair to the environment; overwrites the value if the variable already exists clash-libAdd a variable-value pair to the environment; if the variable already exists, the two values are merged with the given function clash-libAdd a list of variable-value pairs; the values of existing keys will be overwritten clash-libIs the environment empty clash-lib/Get the (left-biased) union of two environments clash-libGet the union of two environments, mapped values existing in both environments will be merged with the given function. clash-lib5Create an environment given a list of var-value pairs clash-lib4Apply a function to every element in the environment clash-libApply a function to every element in the environment; values for which the function returns ! are removed from the environment clash-libStrict left-fold over an environment using both the unique of the the variable and the value clash-libExtract the elements clash-lib*Does the variable exist in the environment clash-lib.Does the variable not exist in the environment clash-lib The empty set clash-libThe set of a single variable clash-libUnion two sets clash-libTake the difference of two sets clash-lib%Is the variable an element in the set clash-lib)Is the variable not an element in the set clash-lib5Is the set of variables A a subset of the variables B clash-lib"Are the sets of variables disjoint clash-libCheck whether a varset is empty clash-lib,Remove a variable from the set based on its k clash-lib%Create a set from a list of variables clash-lib The empty set clash-lib Add a list of variables in scope clash-lib$Union two sets of in scope variables clash-lib Is the set of variables in scope clash-libLook up a variable in the 7. This gives you the canonical version of the variable clash-libIs the variable in scope clash-lib8Check whether an element exists in the set based on the k contained in that element clash-libIs the variable not in scope clash-lib"Create a set of variables in scope clash-lib The empty set clash-libEnsure that the k% of a variable does not occur in the  clash-lib$Create an empty renaming environment clash-libLook up the renaming of an type-variable occurrence in the left term clash-libLook up the renaming of an type-variable occurrence in the right term clash-lib1Simultaneously go under the type-variable binder bTvL and type-variable binder bTvR, finds a new binder newTvB%, and return an environment mapping [bTvL -> newB] and [bTvR -> newB] clash-libApplies  to several variables: the two variable lists must be of equal length. clash-lib6Look up the renaming of an occurrence in the left term clash-lib6Look up the renaming of an occurrence in the left term clash-lib#Simultaneously go under the binder bL and binder bR, finds a new binder newTvB$, and return an environment mapping  [bL -> newB] and  [bR -> newB] clash-libApplies  to several variables: the two variable lists must be of equal length. clash-libSet of variables A clash-libSet of variables B clash-libUnique in scope test clash-libSeed99(C) 2013-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , QBayLogic, Google Inc. 2020-2022, QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V. None #$&/02356789:; show name) This accounts for the set of transformations which are being debugged. For a check which is agnostic to the a transformation, see . clash-libCheck that the transformation info shown supports the requested info. If the call-site is in the context of a particular transformation,  should be used instead. clash-libfclash-debug DebugNone clash-libfclash-debug DebugSilent clash-libfclash-debug DebugFinal clash-libfclash-debug DebugCount clash-libfclash-debug DebugName clash-libfclash-debug DebugTry clash-libfclash-debug DebugApplied clash-libfclash-debug DebugAll clash-libRender an SDC file from an SdcInfo. The clock periods, waveforms, and targets are all hardcoded.(C) 2012-2016, University of Twente 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<F  clash-lib:Gives the free type-variables in a Type, implemented as a The / is closed over the types of its variables, so:  k) Int) = {a, k}  clash-libGives the "interesting" free variables in a Type, implemented as a The + is closed over the types of variables, so: foldMapOf (typeFreeVars' (const True) IntSet.empty) unitVarSet ((a:* -> k) Int) = {a, k} "Note [Closing over kind variables]Consider the type forall k . b -> kwhere b :: k -> Type)When we close over the free variables of forall k . b -> k, i.e. b , then the k in b :: k -> Type is most definitely not the k in forall k . b -> k. So when a type variable is free, i.e. not in the inScope set, its kind variables also arent; so in order to prevent collisions due to shadowing we close using an empty inScope set. See also: https://gitlab.haskell.org/ghc/ghc/-/commit/503514b94f8dc7bd9eab5392206649aee45f140b clash-lib>Check whether a set of variables does not occur free in a term clash-lib6Check whether a local identifier occurs free in a term clash-libCalculate the local free variable of an expression: the free type variables and the free identifiers that are not bound in the global environment. clash-lib7Gives the free identifiers of a Term, implemented as a  clash-libCalculate the local free identifiers of an expression: the free identifiers that are not bound in the global environment. clash-libCalculate the global free identifiers of an expression: the free identifiers that are bound in the global environment. clash-lib:Gives the free type-variables of a Term, implemented as a The + is closed over the types of variables, so: foldMapOf termFreeTyVars unitVarSet (case (x : (a:* -> k) Int)) of {}) = {a, k}  clash-libGives the "interesting" free variables in a Term, implemented as a The + is closed over the types of variables, so: foldMapOf (termFreeVars' (const True)) unitVarSet (case (x : (a:* -> k) Int)) of {}) = {x, a, k} "Note [Closing over type variables]Consider the term /\(k :: Type) -> \(b :: k) -> awhere a :: k)When we close over the free variables of /k -> (b :: k) -> (a :: k), i.e. a , then the k in a :: k is most definitely not the k in introduced by the /k ->. So when a term variable is free, i.e. not in the inScope set, its type variables also arent; so in order to prevent collisions due to shadowing we close using an empty inScope set. See also: https://gitlab.haskell.org/ghc/ghc/-/commit/503514b94f8dc7bd9eab5392206649aee45f140b clash-libGet the free variables of an expression and count the number of occurrences clash-lib3Predicate telling whether a variable is interesting clash-lib+Uniques of the variables in scope, used by  clash-lib3Predicate telling whether a variable is interesting  (C) 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<>  clash-libSomething is closed if it has no free variables. This function may be replaced with a more efficient implementation. clash-libCheck if a variable is free in the given value. This function may be replaced with a more efficient implementation. clash-libCheck if a variable is not free in the given value. This function may be replaced with a more efficient implementation. clash-libCheck if all variables in a set are free in the given value. This function may be replaced with a more efficient implementation. clash-libCheck if no variables in a set are free in the given value. This function may be replaced with a more efficient implementation.(C) 2021 QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<  clash-libData type that indicates what kind of solution (if any) was found clash-lib1Solution was found. Variable equals some integer. clash-lib8A solution was found, but it involved negative naturals. clash-lib4Given type wasn't an equation, or it was unsolvable. clash-lib9Solve given equations and return all non-absurd solutions clash-lib Solve simple equalities such as:a ~ 33 ~ aSomeType a b ~ SomeType 3 5SomeType 3 5 ~ SomeType a bSomeType a 5 ~ SomeType 3 b clash-libSolve equations supported by  normalizeAdd. See documentation of TypeEqSolution to understand the return value. clash-libGiven the left and right side of an equation, normalize it such that equations of the following forms: 5 ~ n + 2 5 ~ 2 + n n + 2 ~ 5 2 + n ~ 5are returned as (5, 2, n) clash-libTests for nonsencical patterns due to types being "absurd". See  isAbsurdEq for more info. clash-lib-Determines if an "equation" obtained through patEqs or typeEq is absurd. That is, it tests if two types that are definitely not equal are asserted to be equal OR if the computation of the types yield some absurd (intermediate) result such as -1. clash-libGet constraint equations clash-lib+If type is an equation, return LHS and RHS. clash-libexistential tvs  (C) 2012-2016, University of Twente, 2017, Google Inc. 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<(Z clash-libAlpha equality for types clash-libType substitution, see Works only if the domain of the substitution is superset of the type being substituted into clash-lib6A substitution environment containing containing both  and  substitutions.6Some invariants apply to how you use the substitution: The  contains at least those s and s that will be in scope after applying the substitution to a term. Precisely, the in-scope set must be a superset of the free variables of the substitution range that might possibly clash with locally-bound variables in the thing being substituted in..You may only apply the substitution once. See There are various ways of setting up the in-scope set such that the first of of these invariants holds:?Arrange that the in-scope set really is all the things in scopeArrange that it's the free vars of the range of the substitutionMake it empty, if you know that all the free variables of the substitution are fresh, and hence cant possibly clash clash-libType substitution#The following invariants must hold: The 8 is needed only to guide the generation of fresh uniques5In particular, the kind of the type variables in the  is not relevant.%The substitution is only applied onceNote [Apply Once]We might instantiate forall a b. ty with the types [a, b] or [b, a]%. So the substitution might go like [a -> b, b -> a]. A similar situation arises in terms when we find a redex like (a ->  b -> e) b a. Then we also end up with a substitution that permutes variables. Other variations happen to; for example  [a -> (a,b)].SO A TvSubst MUST BE APPLIED PRECISELY ONCE, OR THINGS MIGHT LOOP!Note [The substitution invariant]?When calling (substTy subst ty) it should be the case that the  is a superset of both:3The free variables of the range of the substitutionThe free variables of ty% minus the domain of the substitution clash-libA substitution of s for s%Note [Extending the TvSubstEnv] See " for the invariants that must holdThis invariant allows a short-cut when the subst env is empty: if the TvSubstEnv is empty, i.e. nullVarEnv TvSubstEnv. holds, then (substTy subst ty) does nothing.For example, consider:(a -> b(a ~ Int) -> ... b ...) IntWe substitute Int for a. The Unique of b+ does not change, but nevertheless we add b to the  because b's kind does change(This invariant has several consequences:In , we extend TvSubstEnv if the unique has changed, or if the kind has changedIn  , we do not need to consult the ; the TvSubstEnv is enoughIn /, we can short-circuit when TvSubstEnv is empty clash-libAn empty substitution, starting the variables currently in scope clash-libCreate a type substitution clash-lib/Extend the substitution environment with a new  substitution clash-lib3Extend the substitution environment with a list of  substitutions clash-lib:Extend the substitution environment with a list of global  substitutions clash-lib/Extend the substitution environment with a new  substitution clash-lib3Extend the substitution environment with a list of  substitutions clash-libAdd an  to the in-scope set: as a side effect, remove any existing substitutions for it. clash-libAdd  s to the in-scope set. See also  clash-libSubstitute within a None&/02356789;<>+ clash-lib)Tools to deal with literals encoded as a Term. clash-libConvert  to the constant it represents. Will return an error if (one of the subterms) fail to translate. clash-libSame as , but returns printable error message if it couldn't translate a term. clash-libTerm to convert clash-lib indicates a failure, containing the (sub)term that failed to translate.  indicates a success.!(C) 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<0n  clash-libGet the result type of a polymorphic function given a list of arguments  clash-libLike  , but only applies a single type. If multiple types are being applied use  , as it is more efficient to only substitute once with many types.  clash-lib"(piResultTys f_ty [ty1, ..., tyn]) gives the type of (f ty1 .. tyn) where  f :: f_ty  is interesting because: f_ty* may have more foralls than there are args)Less obviously, it may have fewer forallsFore case 2. think of:,piResultTys (forall a . a) [forall b.b, Int]5This really can happen, such as situations involving s type:undefined :: forall a. a undefined (forall b. b -> b) IntThis term should have the type  (Int -> Int)<, but notice that there are more type args than foralls in s type.For efficiency reasons, when there are no foralls, we simply drop arrows from a function type/kind.  clash-lib+The complete term, used for error messages. "(C) 2012-2016, University of Twente, 2021 , QBayLogic B.V., 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None %&'(/02356789;<E  clash-libHelper existential for  , contains a function that: ,given a term of a type that should be split,creates projections of that term for all the constructor arguments  clash-libRebuild a let expression / let expressions by taking the SCCs of a list of bindings and remaking Let (NonRec ...) ... and Let (Rec ...) ...  clash-lib The type  forall a . a  clash-lib The type forall a. forall b. a -> b  clash-lib$Create a vector of supplied elements  clash-lib&Append elements to the supplied vector  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-bindings  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-bindings  clash-lib$Create a vector of supplied elements  clash-lib*Determine 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.#This also includes BiSignals, i.e.:BiSignalIn High System Intetc.  clash-lib>Determines whether given type is an (alias of en) Enable line.  clash-libDetermines whether given type is an (alias of en) Clock or Reset line  clash-libSame as dataConInstArgTys, but it tries to compute existentials too, hence the extra argument TyConMap=. WARNING: It will return the types of non-existentials only  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.The list of types should be equal to the number of type variables, otherwise Nothing is returned.  clash-libMake a coercion  clash-libMake an unsafe coercion  clash-libTry to reduce an arbitrary type to a literal type (Symbol or Nat), and subsequently extract its String representation  clash-libDetermine whether we should split away types from a product type, i.e. clocks should always be separate arguments, and not part of a product.  clash-lib Worker of   , works on  instead of   clash-libPotentially split apart a list of function argument types. e.g. given: [Int,(Clock,(Reset,Bool)),Char] we return nt,Clock,Reset,Bool,Char]But we would leave [Int, (Bool,Int), Char] unchanged.  clash-lib&Strip implicit parameter wrappers (IP)  clash-libDo an inverse topological sorting of the let-bindings in a let-expression  clash-libGroup let-bindings into cyclic groups and acyclic individual bindings  clash-libMake a case-decomposition that extracts a field out of a (Sum-of-)Product type  clash-lib+Make a binder that should not be referenced  clash-libMake a new, unique, identifier  clash-libThe Nil constructor clash-libThe Cons (:>) constructor clash-lib Element type clash-libLength of the vector clash-libElements to put in the vector  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 append  clash-lib Unique supply clash-lib (Superset of) in scope variables 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 vector  clash-lib Unique supply clash-lib (Superset of) in scope variables 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 tree  clash-libThe LR constructor clash-libThe BR constructor clash-lib Element type clash-libDepth of the tree clash-libElements to put in the tree  clash-libType to examine clash-lib:If we want to split values of the given type then we have Just: The (type-applied) data-constructor which, when applied to values of the types in 3., creates a value of the examined typeFunction that give a term of the type we need to split, creates projections of that term for all the types in 3.:The arguments types of the product we are trying to split.Note that we only split one level at a time (although we check all the way down), e.g. given (Int, (Clock, Bool)) we return: Just ( (,) @Int @(Clock, Bool) , \s -> [case s of (a,b) -> a, case s of (a,b) -> b] , [Int, (Clock, Bool)])4An outer loop is required to subsequently split the  (Clock, Bool) tuple.  clash-lib#Name of the caller of this function clash-lib TyCon cache clash-libSubject of the case-composition clash-lib n'th DataCon clash-lib n'th field  clash-libName of the identifier" " #=(C) 2021, QBayLogic B.V., 2022, Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<I  clash-libThe removedArg primitive represents an argument which is computationally irrelevant, and has been removed from the circuit (as removing it does not change the behaviour of the circuit). Examples of such arguments are unused arguments to blackboxes, as removing them does not affect the rendered HDL.  clash-libThe undefined primitive represents an undefined value that was identified during normalization. This includes undefined results to compile-time evaluation, such as division by zero.  clash-libThe undefinedX primitive represents an X-exception throwing value that was identified during normalization.  $(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)$QBayLogic B.V. None &/02356789;<N   clash-libDetermine whether a term does any work, i.e. adds to the size of the circuit. This function requires a cache (specified as a lens) to store the result for querying work info of global binders.  clash-lib)Determine if a term represents a constant  clash-libA conservative version of  . Is used to determine in bindConstantVar to determine whether an expression can be "bound" (locally inlined). While binding workfree expressions won't result in extra work for the circuit, it might very well cause extra work for Clash. In fact, using   in bindConstantVar makes Clash two orders of magnitude slower for some of our test cases.)In effect, this function is a version of   that also considers references to clocks and resets constant. This allows us to bind HiddenClock(ResetEnable) constructs, allowing Clash to constant spec subconstants - most notably KnownDomain. Doing that enables Clash to eliminate any case-constructs on it.  %(C) 2020-2021, QBayLogic B.V., 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<]  clash-libGlobal term environment. These are the potentially evaluated bodies of the top level definitions which are forced on lookup.  clash-lib+The type constructors known about by Clash.  clash-libThe set of in scope variables during partial evaluation. This includes new variables introduced by the evaluator (such as the ids of binders introduced during eta expansion.)  clash-lib5The supply of fresh names for generating identifiers.  clash-libThe remaining fuel which can be spent inlining global variables. This is saved in the local environment, so when evaluation resumes from WHNF the amount of fuel used is preserved.  clash-lib?The heap containing the results of any evaluated IO primitives.  clash-lib=The address of the next element to be inserted into the heap.  clash-libCache for the results of isWorkFree. This is required to use Clash.Rewrite.WorkFree.isWorkFree.  clash-lib.The id of the term currently under evaluation.  clash-libLocal type environment. These are types that are introduced while evaluating the current term (i.e. by type applications)  clash-libLocal term environment. These are WHNF terms or unevaluated thunks introduced while evaluating the current term (i.e. by applications)  clash-libThe amount of fuel left in the local environment when the previous head was reached. This is needed so resuming evaluation does not lead to additional fuel being available.  clash-libWhen evaluating, keep data constructors for boxed data types (e.g. I#) instead of converting these back to their corresponding primitive. This is used when evaluating terms where the result is subject of a case expression (see note: lifted data types).  clash-libA term which is in beta-normal eta-long form (NF). This has no redexes, and all partially applied functions in sub-terms are eta-expanded.While not strictly necessary, NLam includes the environment at the point the original term was evaluated. This makes it easier for the AsTerm instance for Normal to reintroduce let expressions before lambdas without accidentally floating a let using a lambda bound variable outwards.  clash-libA term which has been potentially evaluated to WHNF. If evaluation has occurred, then there will be no redexes at the head of the Value, but sub-terms may still have redexes. Data constructors are only considered to be values when fully applied, if partially applied they should be eta-expanded during evaluation.Thunks are included so that lazy evaluation can be modelled without needing to store Either Term Value in the environment. This makes the presentation simpler, with the caveat that values must be forced when they are required to not be thunks.  clash-libNeutral terms cannot be reduced, as they represent things like variables which are unknown, partially applied functions, or case expressions where the subject cannot be inspected. Consider:v Stuck if "v" is a free variable p x1 ... xn Stuck if "p" is a primitive that cannot be reduced x $ y Stuck if "x" is not known to be a lambda x @ A Stuck if "x" is not known to be a type lambda case x of ... Stuck if "x" is neutral (cannot choose an alternative)Neutral terms can also be let expressions which preserve required bindings in the normal form representation. Examples of bindings that may be kept are bindings which perform work (and should not be copied) or bindings that are recursive and are still referred to by the body of the let expression.8let ... in ... Preserved bindings are needed by the body  clash-lib"An argument applied to a function  data constructor  primitive.1 1 &(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<`  clash-libConvert a term in some normal form back into a Term. This is important, as it may perform substitutions which have not yet been performed (i.e. when converting from WHNF where heads contain the environment at that point).  '(C) 2020-2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<a  clash-libThe monad of partial evaluation. The inner monad is IO, as primitive evaluation can attempt to evaluate IO actions.  clash-libEvaluate an action in the partial evaluator, returning the result, and the final state of the global environment.  ((C) 2020 QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<i  clash-libAn evaluator for Clash core. This consists of two functions: one to evaluate a term to weak-head normal form (WHNF) and another to recursively evaluate sub-terms to obtain beta-normal eta-long form (NF).  clash-libEvaluate a term to WHNF, converting the result back to a Term. The global environment at the end of evaluation is also returned, callers should preserve any parts of the global environment needed for later calls.  clash-libEvaluate a term to NF, converting the result back to a Term. See   for more details.  clash-lib$The evaluator implementation to use. clash-libThe initial global environment. clash-libWhether evaluation should keep lifted data constructors. See NOTE [Lifted Constructors] in Clash.Core.PartialEval.NormalForm. clash-lib$The id of the term under evaluation. clash-libThe term under evaluation. clash-libNone &/02356789;<s  clash-lib Functions  clash-libType abstractions  clash-libData constructors  clash-libLiterals  clash-libClash's number types are represented by their "fromInteger#" primitive function. So some primitives are values.  clash-libUsed by lazy primitives  clash-lib#Preserve ticks from Terms in Values  clash-lib#Preserve casts from Terms in Values  clash-libA machine represents the current state of the abstract machine used to evaluate terms. A machine has a term under evaluation, a stack, and three heaps:a primitive heap to store IO values from primitives (like ByteArrays)2a global heap to store top-level bindings in scope-a local heap to store local bindings in scopeMachines also include a unique supply and InScopeSet. These are needed when new heap bindings are created, and are just an implementation detail.  clash-libA single step in the partial evaluator. The result is the new heap and stack, and the next expression to be reduced.  clash-libAn evaluator is a collection of basic building blocks which are used to define partial evaluation. In this implementation, it consists of two types of function:?steps, which applies the reduction realtion to the current termNone &/02356789;<(  clash-libInitial state for state monad  clash-lib"What HDL is the backend generating  clash-lib&Location for the primitive definitions  clash-libName 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-libGenerate a HDL package containing type definitions for the given HWTypes  clash-lib-Convert a Netlist HWType to a target HDL type  clash-lib+Query what kind of type a given HDL type is  clash-libNone' &'(/02356789:;<>ßF clash-libWhether to preserve casing in ids or converted everything to lowercase. Influenced by '-fclash-lower-case-basic-identifiers'I clash-libMonad that caches generated components (StateT) and remembers hidden inputs of components that are being generated (WriterT)J clash-libStructures that hold an TL clash-libAn IdentifierSetMonad2 supports unique name generation for Clash NetlistN clash-libStructure describing a top entity: it's id and its port annotations.P clash-lib'Expression used in RHS of a declarationQ clash-lib!Component: base unit of a NetlistR clash-libInternals of a ComponentS clash-libRepresentable hardware typesT clash-libA collection of unique identifiers. Allows for fast fresh identifier generation.NB: use the functions in Clash.Netlist.Id. Don't use the constructor directly.U clash-libHDL identifier. Consists of a base name and a number of extensions. An identifier with a base name of "foo" and a list of extensions [1, 2] will be rendered as "foo_1_2".Note: The Eq instance of  Identifier= is case insensitive! E.g., two identifiers with base names fooBar and FoObAR are considered the same. However, identifiers are stored case preserving. This means Clash won't generate two identifiers with differing case, but it will try to keep capitalization.The goal of this data structure is to greatly simplify how Clash deals with identifiers internally. Any Identifier should be trivially printable to any HDL.NB: use the functions in Clash.Netlist.Id. Don't use these constructors directly.  clash-lib-Type of declaration, concurrent or sequential  clash-libNetlist-level identifier  clash-libIdentifier generated in the NetlistMonad, always derived from another   clash-libAn original Core identifier  clash-libA split identifier (into several sub-identifiers), needed to assign expressions of types that have to be split apart (e.g. tuples of Files)  clash-lib8Context used to fill in the holes of a BlackBox template  clash-lib,Blackbox function name (for error reporting)  clash-libResult names and types. Will typically be a list with a single item. Multiple result targets will be used for "multi result primitives". See fg.  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-libThe scoping level this context is associated with, ensures that  ~ARGN[k][n]8 holes are only filled with values from this context if k0 is equal to the scoping level of this context.  clash-lib-The component the BlackBox is instantiated in  clash-lib The "context name", name set by hi-, defaults to the name of the closest binder  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-libBitVector literal  clash-libBoolean literal  clash-libVector literal  clash-libString literal  clash-libLiteral expression  clash-libDataCon application  clash-libSignal reference  clash-libLeft e: tagToEnum#, Right e : dataToTag#  clash-lib&Instantiation of a BlackBox expression  clash-lib!Convert some type to a BitVector.  clash-libConvert BitVector to some type.  clash-lib Do nothing  clash-libExpression Modifier  clash-libIndex the expression: (Type of expression,DataCon tag,Field Tag)  clash-libSee 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 HWType translator  clash-lib TyCon cache  clash-libAll names currently in scope.  clash-libComponents (to be) generated during this netlist run. This is always a subset of  . Reason d'etre: we currently generate components in a top down manner. E.g. given:A- B- Cwe would generate component A" first. Before trying to generate B and C. A might introduce a number of signal declarations. The names of these signals can't clash with the name of component B, hence we need to pick a name for B unique w.r.t. all these signal names. If we would postpone generating a unqiue name for B til _after_ generating all the signal names, the signal names would get all the "nice" names. E.g., a signal would be called "foo", thereby forcing the component B to be called "foo_1". Ideally, we'd use the "nice" names for components, and the "ugly" names for signals. To achieve this, we generate all the component names up front and subsequently store them in  .  clash-libKeeps track of invocations of mkPrimitive. It is currently used to filter duplicate warning invocations for dubious blackbox instantiations, see GitHub pull request #286.  clash-libNames of components (to be) generated during this netlist run. Includes top entity names.  clash-lib8The current scoping level assigned to black box contexts  clash-libSettings Clash was called with  clash-lib>Whether we're compiling a testbench (suppresses some warnings)  clash-lib3Whether the backend supports ifThenElse expressions  clash-libThe current HDL backend  clash-libEnvironment of the NetlistMonad  clash-lib"Prefix for instance/register names  clash-lib#Postfix for instance/register names  clash-lib)(Maybe) user given instance/register name  clash-libUnparsed identifier. Used for things such as port names, which should appear in the HDL exactly as the user specified.  clash-libParsed and sanitized identifier. See various fields for more information on its invariants.  clash-libBase name of identifier. make makes sure this field:does not end in _num where num is a digit./is solely made up of printable ASCII characters%has no leading or trailing whitespace  clash-libSame as  , but can be used for equality testing that doesn't depend on capitalization.  clash-libExtensions applied to base identifier. E.g., an identifier with a base name of foo, and an extension of [6, 5] would render as foo_5_6. Note that extensions are stored in reverse order for easier manipulation.  clash-libSee IdentifierType.  clash-lib%HDL this identifier is generated for.  clash-libStores where this identifier was generated. Tracking is only enabled is  debugIsOn, otherwise this field will be populated by an empty callstack.  clash-libAllow escaped ids? If set to False, "make" will always behave like "makeBasic".  clash-lib3Force all generated basic identifiers to lowercase.  clash-lib%HDL to generate fresh identifiers for  clash-libMaps an  0 to a map mapping the number of extensions (in  ) to the maximum word at that basename/level. For example, if a set would contain the identifiers: !foo, foo_1, foo_2, bar_5, bar_7_8the map would look like: (foo, [(0, 0), (1, 2)), (bar, [(1, 5), (2, 8)])]This mapping makes sure we can quickly generate fresh identifiers. For example, generating a new id for "foo_1" would be a matter of looking up the base name in this map, concluding that the maximum identifier with this basename and this number of extensions is "foo_2", subsequently generating "foo_3".Note that an identifier with no extensions is also stored in this map for practical purposes, but the maximum ext is invalid.  clash-libIdentifier store  clash-libA basic identifier: does not have to be escaped in order to be a valid identifier in HDL.  clash-libAn extended identifier: has to be escaped, wrapped, or otherwise postprocessed before writhing it to HDL.  clash-libSee   clash-libSee ExpandedTopEntity  clash-libSame as PortName, but fully expanded  clash-libSame as  PortProduct, but fully expanded  clash-libSame as  TopEntity6, but with all port names that end up in HDL specified  clash-lib'Inputs with fully expanded port names. Nothing if port is void.  clash-lib'Output with fully expanded port names. Nothing& if port is void or BiDirectionalOut.  clash-libId of top entity  clash-lib(Maybe) a topentity annotation  clash-lib#Whether this entity is a test bench  clash-lib/Check if an input port is really an inout port.  clash-libFind the name and domain name of each clock argument of a component.  clash-libExtract hardware attributes from Annotated. Returns an empty list if non-Annotated given or if Annotated has an empty list of attributes.  clash-libEliminator for   , fails on   clash-libReturn the type(s) of a  NetListId', returns multiple types when given a   clash-libReturn the type of a   , fails on   clash-libNB6: serialisation doesn't preserve the embedded function  clash-libUsed arguments clash-lib#Validation function. Should return 3 if function can't render given a certain context. clash-libRender function  clash-libPrimitive name clash-libVHDL only: add library declarations clash-libVHDL only: add use declarations: clash-libIntel/Quartus only: create a .qsys file from given template. clash-libTemplate tokens clash-lib*Context in which tokens should be rendered clash-libWrap in parentheses?  clash-lib Type prefix clash-libType to convert _from_ clash-lib"Expression to convert to BitVector  clash-lib Type prefix clash-libType to convert _to_ clash-libBitVector to convert  clash-lib2Edge of the clock the statement should be executed clash-libClock expression clash-libStatements to be executed on the active clock edge | Statements running at simulator start  clash-libScrutinized expresson clash-lib"Type of the scrutinized expression clash-lib*List of: (Maybe match, RHS of Alternative)  clash-libSignal to assign clash-libAssigned expression  clash-libSignal to assign clash-libType of the result/alternatives clash-libScrutinized expression clash-libType of the scrutinee clash-libList of: (Maybe expression scrutinized expression is compared with,RHS of alternative)  clash-lib%Whether it's an entity or a component clash-libLibrary instance is defined in clash-lib'Attributes to add to the generated code clash-lib"The component's (or entity's) name clash-libInstance label clash-libList of parameters for this component (param name, param type, param value)  clash-libPrimitive name clash-libVHDL only: add library declarations clash-libVHDL only: add use declarations clash-libIntel Quartus only: create a .qsys file from given template clash-libTemplate tokens clash-lib*Context in which tokens should be rendered  clash-lib1Note; will be inserted as a comment in target hdl clash-libWire or register clash-libName of signal clash-lib+Pointer to type of signal or type of signal clash-lib#Initial value ^ Signal declaration  clash-libcondition text, for example FORMAL  clash-lib*An identifier exactly as given by the user clash-libParsed version of raw identifier. Will not be populated if this identifier was created with an unsafe function. clash-libStores where this identifier was generated. Tracking is only enabled is  debugIsOn, otherwise this field will be populated by an empty callstack.  clash-lib;Name hint. Can be used to create intermediate signal names. clash-libType of product clash-libProduct fields  clash-lib1Note; will be inserted as a comment in target hdl clash-libName of signal clash-libType of signal  clash-libmask clash-libvalue  clash-lib8Eliminator for Identifiers generated in the NetlistMonad clash-lib(Eliminator for original Core IdentifiersFGHI JKLMN O P Q R S T U V R FGHI JKLMN O P Q R S T U V ,(C) 2019, Myrtle Software LtdBSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<ʾ  clash-libPretty print Property. Doesn't print valid HDL, but can be used for debugging purposes.  clash-libGenerate something like: always &(posedge clk_i) isOn: cover (result);@  clash-lib"HDL to generate PSL expression for clash-lib Property name clash-lib Clock name clash-lib$Edge property should be sensitive to clash-libAssertion / Cover statement  clash-lib Property name clash-lib Clock name clash-lib$Edge property should be sensitive to clash-libAssertion / Cover statement  clash-lib Property name clash-libClock expression clash-lib$Edge property should be sensitive to clash-libAssertion / Cover statement  -(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789:;<>D  clash-libState of a rewriting session  clash-lib'Total number of applied transformations  clash-lib=Map that tracks how many times each transformation is applied  clash-libGlobal binders  clash-libSupply of unique numbers  clash-lib&Function which is currently normalized  clash-lib Used for Fresh  clash-libUsed as a heap for compile-time evaluation of primitives that live in I/O  clash-lib6Map telling whether a binder's definition is work-free  clash-libAdditional state  clash-libState used by the inspection mechanism for recording rewrite steps. clash-libcurrent context clash-libName of the transformation clash-libName of the current binder clash-lib Term before apply clash-lib Term after apply clash-lib,Read-only environment of a rewriting session clash-lib&The global environment of the compiler clash-lib*Hardcode Type -> FilteredHWType translator clash-lib*Hardcoded evaluator for partial evaluation clash-lib,Hardcoded evaluator for WHNF (old evaluator) 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. clash-lib'Run the computation in the RewriteMonad   .(C) 2012-2016, University of Twente 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<ց clash-lib1Apply a transformation on the subtrees of an term clash-lib'Apply two transformations in succession clash-libApply two transformations in succession, and perform a deepseq in between. clash-lib-Apply a transformation in a topdown traversal clash-lib.Apply a transformation in a bottomup traversal clash-lib?Only apply the second transformation if the first one succeeds. clash-libNone&/02356789;<ܐ clash-lib State of the  clash-libGlobal binders clash-lib*Cache of previously specialized functions:Key: (name of the original function, argument position, specialized term/type)Elem: (name of specialized function,type of specialized function) clash-lib2Cache of how many times a function was specialized clash-lib,Cache of function where inlining took place:'Key: function where inlining took place=Elem: (functions which were inlined, number of times inlined) clash-lib7Cache for looking up constantness of blackbox arguments clash-lib8Map telling whether a components is recursively defined.NB: there are only no mutually-recursive component, only self-recursive ones. 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 information1(C) 2020 QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<݃2(C) 2021-2022, QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<83(C) 2019, Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;<{ clash-libConstructs "clean" literals. clash-lib(Base name of constructors (for example:  GHC.Word.W) clash-libFunctions processing4(C) 2019, Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;< clash-libTemplate function for Word8,Word16,.. Constructs "clean" literals. This function generates valid (System)Verilog only!5(C) 2019, Myrtle Software LtdBSD2 (see the file LICENSE)-Christiaan Baaij None &/02356789;< clash-libTemplate function for Int8,Int16,.. Constructs "clean" literals.6(C) 2020, QBayLogic B.V.BSD2 (see the file LICENSE)$QBayLogic B.V. None &/02356789;<W clash-lib%Convert an identifier to string. Use unmake if you need the IdentifierType too. clash-lib"Identifier set without identifiers clash-libUnion of two identifier sets. Errors if given sets have been made with different options enabled. clash-lib3Make a identifier set filled with given identifiers clash-lib!Remove all identifiers from a set clash-lib%Convert an identifier to string. Use unmake if you need the IdentifierType too. clash-libLike ,  creates an identifier that will be spliced at verbatim in the HDL. As opposed to , the resulting Identifier might be generated at a later point as it is NOT added to an IdentifierSet. clash-lib%Add an identifier to an IdentifierSet clash-lib#Add identifiers to an IdentifierSet clash-libAdd a string as is to an IdentifierSet. Should only be used for identifiers that should be spliced at verbatim in HDL, such as port names. It's sanitized version will still be added to the identifier set, to prevent freshly generated variables clashing with the raw one. clash-lib,Make unique identifier based on given string clash-lib2Make unique basic identifier based on given string clash-libMake unique basic identifier based on given string. If given string can't be converted to a basic identifier (i.e., it would yield an empty string) the alternative name is used. clash-libMake unique identifier. Uses  if first argument is   clash-libGiven identifier "foo_1_2" return "foo_1_3". If "foo_1_3" is already a member of the given set, return "foo_1_4" instead, etc. Identifier returned is guaranteed to be unique. clash-libSame as nextM!, but returns N fresh identifiers clash-libGiven identifier "foo_1_2" return "foo_1_2_0". If "foo_1_2_0" is already a member of the given set, return "foo_1_2_1" instead, etc. Identifier returned is guaranteed to be unique. clash-libSame as deepenM, but returns N fresh identifiers. For example, given "foo_23" is would return "foo_23_0", "foo_23_1", ... clash-libGiven identifier "foo_1_2" and a suffix "bar", return an identifier called "foo_bar". Identifier returned is guaranteed to be unique according to the rules of nextIdentifier. clash-libGiven identifier "foo_1_2" and a prefix "bar", return an identifier called "bar_foo". Identifier returned is guaranteed to be unique according to the rules of nextIdentifier. clash-libConvert a Clash Core Id to an identifier. Makes sure returned identifier is unique. clash-libAllow escaped identifiers? clash-lib+Should all basic identifiers be lower case? clash-libHDL to generate names for clash-libAllow escaped identifiers? clash-lib+Should all basic identifiers be lower case? clash-libHDL to generate names for clash-libIdentifiers to add to set clash-lib Name hint clash-libIf name hint can't be converted to a sensible basic id, use this instead#JKLMTUV W#TLMJKUV Wm(C) 2017, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;<<(C) 2018, Google Inc.BSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;< clash-libConverts a list of BitRepresentation.Bits to their Netlist counterpart. clash-lib*Type to convert to bit representation type>(C) 2012-2016, University of Twente, 2017 , Myrtle Software Ltd 2017-2018, Google Inc. 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None  #$%&/02356789;Something was annotated as being a PortProduct, but wasn't one clash-libIdentifier to assign. Top entities are instantiated using positional arguments, so this doesn't hold a port name. clash-libType assigned to port clash-lib,Generate a simple port_name expression. See: https://www.hdlworks.com/hdl_corner/vhdl_ref/VHDLContents/PortMap.htmThis function will simply make the left part of a single port map, e.g. Rst in: Rst => Reset,If you need more complex constructions, e.g. Q(3 downto 1)you can build an Expr manually. clash-libThrow away information indicating which constructor fields were filtered due to being void. clash-libStrip as many Void layers as possible. Might still return a Void if the void doesn't contain a hwtype. clash-lib5Determines if type is a zero-width construct ("void") clash-libSame as isVoid , but on FilteredHWType instead of HWType 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 if the term was not in a normalized form. clash-libConverts a Core type to a HWType given a function that translates certain builtin types. Errors if the Core type is not translatable. clash-libSame as unsafeCoreTypeToHWTypeM&, but discards void filter information clash-libConverts a Core type to a HWType within the NetlistMonad; errors on failure clash-libSame as coreTypeToHWTypeM&, but discards void filter information clash-lib:Converts a Core type to a HWType within the NetlistMonad;  on failure clash-libConstructs error message for unexpected projections out of a type annotated with a custom bit representation. clash-libHelper function of  clash-libGiven a map containing custom bit representation, a type, and the same type represented as HWType, convert the HWType to a CustomSP/CustomSum if it has a custom bit representation. clash-libSame as coreTypeToHWType&, but discards void filter information 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-libGenerates original indices in list before filtering, given a list of removed indices.+originalIndices [False, False, True, False][0,1,3] clash-libConverts an algebraic Core type (split into a TyCon and its argument) to a HWType. clash-libDetermine whether a data constructor has unconstrained existential type variables, i.e. those that cannot be inferred by the (potential) constraints between the existential type variables and universal type variables.8So here we have an example of a constrained existential:data Vec :: Nat -> Type -> Type where Nil :: Vec 0 a Cons :: forall m . (n ~ m + 1) => a -> Vec m a -> Vec n a!where we can generate a type for m when we know n (by doing `n-1`).7And here is an example of an unconstrained existential:data SomeSNat where where SomeSNat :: forall m . SNat m -> SomeSNat-where there is no way to generate a type for m from any context.So why do we care? Because terms need to be completely monomorphic in order to be translated to circuits. And having a topEntity lambda-bound variable with an unconstrained existential type prevents us from achieving a fully monomorphic term. clash-lib/Simple check if a TyCon is recursively defined.6Note [Look through type families in recursivity check] Consider: data SList :: [Type] -> Type where SNil :: SList [] CSons :: a -> Sing (as :: [k]) -> SList (a:as) type family Sing [a] = SList [a] ;Without looking through type families, we would think that SList, is not recursive. This lead to issue #1921 clash-libDetermines if a Core type is translatable to a HWType given a function that translates certain builtin types. clash-libDetermines the bitsize of a type. For types that don't get turned into real values in hardware (string, integer) the size is 0. clash-lib3Determines the bitsize of the constructor of a type clash-libGives 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  if the term has a Core type that is not translatable to a HWType. clash-libUniquely rename all the variables and their references in a normalized term clash-lib Produce a % when predicate is True, else Nothing clash-libSet the name of the binder if the given term is a blackbox requesting a specific name for the result binder. It might return multiple names in case of a multi result primitive. clash-libRender a blackbox given its context. Renders _just_ the blackbox, not any corresponding includes, libraries, and so forth. clash-libSame as idToPort, but * Throws an error if the port is a composite type with a BiSignalIn clash-libSame as idToPort, but: * Throws an error if port is of type BiSignalIn clash-libMake a set of IDs unique; also returns a substitution from old ID to new updated unique ID. clash-libPreserve the complete state before running an action, and restore it afterwards. clash-libPreserve the Netlist  , ! when executing a monadic action clash-lib%Prefix given string before portnames except when this string is empty. clash-libSee  /  clash-libTop entities only expose primitive types or types that don't need explicit conversion to a primitive type (i.e., no types from the _types module). This function converts from a custom type to a primitive type if needed.See  ' for more info on primitive type kinds. clash-libTop entities only expose primitive types or types that don't need explicit conversion to a primitive type (i.e., no types from the _types module). This function converts from a primitive type to a custom type if needed.See  ' for more info on primitive type kinds. clash-lib;Create port names for the declaration of a top entity. For  instantiation see . clash-lib$Create a Vector chain for a list of Us clash-lib#Create a RTree chain for a list of Us clash-libStrips one or more layers of attributes from a HWType; stops at first non-Annotated. Accumulates all attributes of nested annotations. clash-libCreate output port names for the declaration of a top entity. For  instantiation see . clash-libInstantiate a TopEntity, and add the proper type-conversions where needed clash-libGenerate input port(s) associated with a single argument for an instantiation of a top entity. This function composes the input ports into a single signal and returns its name. clash-lib&Consider the following type signature:  f :: Signal dom (Vec 6 A) `Annotate` Attr "keep" -> Signal dom (Vec 6 B) What does the annotation mean, considering that Clash will split these vectors into multiple in- and output ports? Should we apply the annotation to all individual ports? How would we handle pin mappings? For now, we simply throw an error. This is a helper function to do so. clash-libGenerate output port(s) for an instantiation of a top entity. This function combines all output ports into a signal identifier and returns its name. clash-libTry to merge nested modifiers into a single modifier, needed by the VHDL and SystemVerilog backend. clash-libDetermines if any type variables (exts) are bound in any of the given type or term variables (tms). It's currently only used to detect bound existentials, hence the name. clash-libRun a NetlistMonad computation in the context of the given source ticks and name modifier ticks clash-libAdd the pre- and suffix names in the current environment to the given identifier clash-libSame as , but also adds identifiers to the identifier set of the monad. clash-libTake a top entity and expand its port names. I.e., make sure that every port that should be generated in the HDL is part of the data structure. clash-libTake a top entity and expand its port names. I.e., make sure that every port that should be generated in the HDL is part of the data structure. It works on FilteredHWType( in order to generate stable port names. clash-lib,Approximate location in original source file clash-libType to convert to HWType clash-libType to convert to HWType clash-libConstructor index clash-lib Field index clash-lib;Map containing all custom representations index on its type clash-libCustom reprs are index on type, so we need the clash core type to look it up. clash-lib1Type of previous argument represented as a HWType clash-libType to convert to HWType clash-libType to convert to HWType clash-lib3Were voids. Length must be less than or equal to n. clash-libOriginal indices clash-lib#Hardcoded Type -> HWType translator clash-lib TyCon cache clash-lib9String representation of the Core type for error messages clash-lib The TyCon clash-libIts applied arguments clash-libAn error string or a tuple with the type and possibly a list of removed arguments. clash-libString considered representable clash-libTerm to convert to HWType clash-libTop entity annotation where:!Nothing: term is not a top entityJust Nothing: term is a top entity, but has no explicit annotationJust (Just ..): term is a top entity, and has an explicit annotation clash-libTop entity annotation where:!Nothing: term is not a top entityJust ..: term is a top entity clash-libTop entity annotation where:!Nothing: term is not a top entityJust ..: term is a top entity clash-libExisting substitution clash-libIDs to make unique clash-lib!(Unique IDs, update substitution) clash-libPort name description clash-lib(port names, signal decls for intermediate signals, argument expr, argument id) clash-libNew inline strategy enabled clash-libComponent name prefix clash-lib+Create component name based on this Core Id clash-libTop entity name prefix clash-libTop entity annotation clash-libNew identifier clash-libLibrary entity is defined in clash-lib"Attributes to add to generate code clash-lib"The component's (or entity's) name clash-libInstance label clash-libList of parameters for this component (param name, param type, param value) clash-libInput port assignments clash-libOutput port assignments clash-libName of the TopEntity component clash-libA corresponding  TopEntity annotation clash-lib=The name and type of the signal to which to assign the result clash-lib"The arguments with voids filtered. clash-libTick declarations clash-libThe PortName, of a _TopEntity_ annotation for this input. clash-lib(ports to assign, declarations for intermediate signals, argument signal) clash-libThe PortName, of a _TopEntity_ annotation for this output clash-lib(ports to assign, declarations for intermediate signals, result signal) clash-lib!The source ticks are turned into  s and are passed as an argument to the NetlistMonad computation. Name modifier ticks will change the local environment for the NetlistMonad computation. clash-lib&Arguments. Ids are used as name hints. clash-lib Result. Id is used as name hint. clash-libIf Nothing1, an expanded top entity will be generated as if defSyn was passed. clash-libEither some error (see  ExpandError) or and expanded top entity. All identifiers in the expanded top entity will be added to NetlistState's IdentifierSet. clash-libSettings of this IdentifierSet will be used to generate valid identifiers. Note that the generated identifiers are not* guaranteed to be unique w.r.t. this set. clash-lib&Arguments. Ids are used as name hints. clash-lib Result. Id is used as name hint. clash-libIf Nothing1, an expanded top entity will be generated as if defSyn was passed. clash-libEither some error (see  ExpandError) or and expanded top entity. All identifiers in the expanded top entity will be added to NetlistState's IdentifierSet. clash-lib&Arguments. Ids are used as name hints. clash-lib Result. Id is used as name hint. clash-libTop entity to expand clash-libEither some error (see  ExpandError) or and expanded top entity. The expanded top entity in turn contains an Either too. Left means that the name was supplied by the user and should be inserted at verbatim, Right is a name generated by Clash.?(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789; 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-libInline the first set of binder into the second set of binders and into the body of the original let expression. clash-libLift the first set of binders to the level of global bindings, and substitute these lifted bindings into the second set of binders and the body of the original let expression. 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 RHS clash-lib,Make a global function for a name-term tuple clash-lib+Add a function to the set of global binders clash-libCreate a new name out of the given name, but with another unique. Resulting unique is guaranteed to not be in the given InScopeSet. clash-libCreate a new name out of the given name, but with another unique. Resulting unique is guaranteed to not be in the given BindingMap. clash-lib5Determine if a term cannot be represented in hardware clash-lib5Determine if a type cannot be represented in hardware clash-libEvaluate an expression to weak-head normal form (WHNF), and apply a transformation on the expression in WHNF. clash-lib>Binds variables on the PureHeap over the result of the rewriteTo prevent unnecessary rewrites only do this when rewrite changed something. clash-lib4Remove unused binders in given let-binding. Returns Nothing" if no unused binders were found. clash-libName of the transformation clash-libTransformation to be applied clash-libName of the transformation clash-libOriginal expression clash-lib$Whether the rewrite indicated change clash-libNew expression 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-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#Body where substitution takes place clash-lib Let-bindings that we wanted to substitute, but turned out to be recursive+1 Let-binders where substitution took place$2 Body where substitution took place clash-lib5Let-binders to lift, and substitute the lifted result clash-lib*Lef-binders where substitution takes place clash-lib#Body where substitution takes place clash-lib Property test clash-libTest whether to lift or inline True: inline False: lift clash-libName of the function clash-libTerm bound to the function clash-lib6Name with a proper unique and the type of the function clash-libString representable clash-libString representable clash-libWhether the expression we're reducing to WHNF is the subject of a case expression.%  @(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<K clash-libRemove all undefined alternatives from case expressions, replacing them with the value of another defined alternative. If there is one defined alternative, the entire expression is replaced with that alternative. If there are no defined alternatives, the entire expression is replaced with a call to .e.g. It convertscase x of D1 a -> f a D2 -> undefined D3 -> undefinedtolet subj = x a = case subj of D1 a -> field0 in f awhere fieldN is an internal variable referring to the nth argument of a data constructor.A(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<N8 clash-libSplit apart (global) function arguments that contain types that we want to separate off, e.g. Clocks. Works on both the definition side (i.e. the lambda), and the call site (i.e. the application of the global variable). e.g. turns 6f :: (Clock System, Reset System) -> Signal System Intinto 6f :: Clock System -> Reset System -> Signal System IntB(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc. 2022 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None %&/02356789;<OlC(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<Q clash-libEta-expand functions with a Synthesize annotation, needed to allow such functions to appear as arguments to higher-order primitives. clash-lib9Eta-expand top-level lambda's (DON'T use in a traversal!)D(C) 2015-2016, University of Twente, 2016 , Myrtle Software Ltd, 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<u3 clash-libMakes two case statements: the first one extract the _head_ from the given vector, the latter the tail. clash-lib$Create a vector of supplied elements clash-libCreate an empty vector clash-libReplace an application of the Clash.Sized.Vector.reverse) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.reverse 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.iterateI) primitive on vectors of a known length n3, by the fully unrolled recursive "definition" of Clash.Sized.Vector.iterateI 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 vector*e.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-libVec TyCon name clash-libVec TyCon name clash-libVec TyCon name clash-libVec TyCon name clash-libVec TyCon name clash-libVec TyCon name clash-libThe Cons (:>) constructor clash-lib Element type clash-libLength of the vector clash-libVector to extract head from clash-lib (head of vector, tail of vector) clash-libThe Cons (:>) constructor clash-lib Element type clash-libLength of the vector clash-libhead of the vector clash-libtail of the vector clash-libThe Nil constructor clash-libThe element type clash-libLength of the vector clash-libElement of type of the vector clash-libThe vector to reverse clash-libzipWith primitive info clash-libLength of the vector(s) clash-lib'Element type of the lhs of the function clash-lib'Element type of the rhs of the function clash-lib*Element type of the result of the function clash-libThe zipWith'd functions clash-libThe 1st vector argument clash-libThe 2nd vector argument clash-libmap primitive info 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 vector clash-libVector's element type clash-lib Vector's type clash-libiterateI's HO-function argument clash-libiterateI's start value clash-libFully unrolled definition 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-lib term clash-libb ty clash-libLength of the vector clash-libElements of the vector clash-lib!Primitive info for foldr blackbox 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-libPrimitive info for  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-libUnconcat primitive info clash-libLength of the result vector clash-lib+Length of the elements of the result vector clash-lib Element type clash-lib2SNat "Length of the elements of the result vector" 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-libSize of vector clash-libType of vector element clash-libType of vector clash-libVector clash-libIndex clash-libElement clash-libSize of vector clash-libType of vector element clash-libVector clash-libIndex 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$$E(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2022, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789; STy Int SBool :: Bool -> STy Boolf :: STy ty -> ty f (SInt b) = b + 1 f (SBool True) = False f (SBool False) = True {- NOINLINE f -}g :: STy Int -> Int g = ff is always specialized on STy Int. The SBool alternatives are therefore unreachable. Additional information can be found at: 5https://github.com/clash-lang/clash-compiler/pull/465 clash-lib3Flatten ridiculous case-statements generated by GHC+For case-statements in haskell of the form: f :: 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-libLift the let-bindings out of the subject of a Case-decomposition clash-libTries to eliminate existentials by using heuristics to determine what the existential should be. For example, consider Vec:data Vec :: Nat -> Type -> Type where Nil :: Vec 0 a Cons x xs :: a -> Vec n a -> Vec (n + 1) aThus, / (annotated with existentials) could look like:null :: forall n . Vec n Bool -> Bool null v = case v of Nil {n ~ 0} -> True Cons {n1:Nat} {n~n1+1} (x :: a) (xs :: Vec n1 a) -> False8When it's applied to a vector of length 5, this becomes:null :: Vec 5 Bool -> Bool null v = case v of Nil {5 ~ 0} -> True Cons {n1:Nat} {5~n1+1} (x :: a) (xs :: Vec n1 a) -> FalseThis function solves n1 and replaces every occurrence with its solution. A very limited number of solutions are currently recognized: only adds (such as in the example) will be solved.=(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;None #$%&/02356789;<g clash-libHash a compiled primitive map. It needs a separate function (as opposed to just ) as it might contain (obviously unhashable) Haskell functions. This function takes the hash value stored with the function instead. clash-libGenerate a set of primitives that are found in the primitive definition files in the given directories. clash-lib4Determine what argument should be constant / literal clash-lib?Looks up the plurality of a function's function argument. See  for more information. If not set, the returned plurality will default to 1. clash-libunresolved primitives found in annotations (in LoadModules and LoadInterfaceFiles) clash-lib/Directories to search for primitive definitions clash-libArguments passed to blackbox clash-lib Result types clash-lib0Argument number holding the function of interest clash-libPlurality of function. Defaults to 1. Does not err if argument isn't a function in the first place. State of monad will not be modified.F(C) 2012-2016, University of Twente, 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None #$&/02356789;< clash-lib>New let-bindings to be created for all the non-constants found clash-libA term where all the non-constant constructs are replaced by variable references (found in ) clash-libWhether the algorithm found a constant at all. (If it didn't, it's no use creating any new let-bindings!) clash-libDetermine if argument should reduce to a constant given a primitive and an argument number. Caches results. clash-libGiven a list of transformation contexts, determine if any of the contexts indicates that the current arg is to be reduced to a constant / literal. clash-libDetermine if a function is already inlined in the context of the  NetlistMonad clash-libRecord a new inlining in the  clash-libTest whether a given term represents a non-recursive global variable clash-lib;Assert whether a name is a reference to a recursive binder. clash-libCalculate constant spec info. The goal of this function is to analyze a given term and yield a new term that:+Leaves all the constant parts as they were.Has all _variable_ parts replaced by a newly generated identifier./The result structure will additionally contain:4Whether the function found any constant parts at allA list of let-bindings binding the aforementioned identifiers with the term they replaced.This can be used in functions wanting to constant specialize over partially constant data structures. clash-lib9Collect all binders mentioned in CallGraph into a HashSet clash-lib=Create a call graph for a set of global binders, given a root clash-libGive a "performance/size" classification of a function in normal form. clash-lib;Determine whether a function adds a lot of hardware or not.It is considered expensive when it has 2 or more of the following components: functions primitivesselections (multiplexers) clash-libTurn type equality constraints into substitutions and apply them. So given: ?/\dom . \(eq : dom ~ "System") . \(eta : Signal dom Bool) . eta#we create the substitution [dom := System] and apply it to create: \(eq : "System" ~ "System") . \(eta : Signal "System" Bool) . etaNB: Users of this function should ensure it's only applied to TopEntities clash-libThe type equivalent of  clash-lib7Rewrite a term according to the provided transformation clash-libA tick to prefix an inlined expression with it's original name. For example, given?foo = bar -- ... bar = baz -- ... baz = quuz -- ...if bar is inlined into foo, then the name of the component should contain the name of the inlined component. This tick ensures that the component in foo is called bar_baz instead of just baz. clash-libPrimitive name clash-libArgument number clash-libYields DontCare for if given primitive name is not found, if the argument does not exist, or if the argument was not mentioned by the blackbox. clash-lib!..in the current transformcontext clash-libFunction we want to inline clash-lib1Function in which we want to perform the inlining clash-libFunction we're inlining clash-lib#Function in which we're inlining it clash-libTransformation to apply clash-libTerm to transform clash-lib&Renew current function being rewrittenG(C) 2018, QBayLogicBSD2 (see the file LICENSE)-Christiaan Baaij None&/02356789;<' clash-libSee:  1https://en.wikipedia.org/wiki/Topological_sorting. This function errors if edges mention nodes not mentioned in the node list or if the given graph contains cycles. clash-libSame as `reverse (topSort nodes edges)` if alternative representations are considered the same. That is, topSort might produce multiple answers and still deliver on its promise of yielding a topologically sorted node list. Likewise, this function promises one of those lists in reverse, but not necessarily the reverse of topSort itself. clash-lib/Get all the terms corresponding to a call graph clash-libNodes clash-libEdges clash-lib+Error message or topologically sorted nodes clash-libNodes clash-libEdges clash-lib%Reversely, topologically sorted nodes clash-lib All bindings clash-libRoot of the call graphH(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789; h a) (f x y) rewriting this to: 1let b = f x y in case x of D a b -> h a b is very bad because b in 'h a b' is now bound by the pattern instead of the newly introduced let-bindinginstead me must deshadow w.r.t. the new variable and rewrite to: 2let b = f x y in case x of D a b1 -> h a b Case 2.Imagine  (x -> e) u where u has a free variable named x, rewriting this to: let x = u in e would be very bad, because the let-binding suddenly captures the free variable in u. To prevent this from happening we over-approximate and check whether x is in the current InScopeSet, and deshadow if that's the case, i.e. we then rewrite to:let x1 = u in e [x:=x1]Case 3. The same for: (let x = w in e) u where u again has a free variable x, rewriting this to: let x = w in (e u) would be bad because the let-binding now captures the free variable in u.To prevent this from happening, we unconditionally deshadow the function part of the application w.r.t. the free variables in the argument part of the application. It is okay to over-approximate in this case and deshadow w.r.t the current InScopeSet. clash-libSpecialise functions on arguments which are constant, except when they are clock, reset generators. clash-lib)Specialize an application on its argument clash-lib8Specialize functions on their non-representable argument clash-lib"Specialize functions on their type clash-libSpecialize functions on arguments which are zero-width. These arguments can have only one possible value, and specialising on this value may create additional oppourtunities for transformations to fire.As we can't remove zero-width arguements (as transformations cannot change the type of a term), we instead substitute all occurances of a lambda-bound variable with a zero-width type with the only value of that type.INone&/02356789;< clash-lib;Push cast over an argument to a function into that functionThis 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') The reason d'etre for this transformation is that we hope to end up with and expression where two casts are "back-to-back" after which we can eliminate them in eliminateCastCast. clash-lib/Push a cast over a case into it's alternatives. clash-libEliminate 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-lib%Push a cast over a Let into it's body clash-libMake 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 J(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;< clash-libTurn an expression into a modified ANF-form. As opposed to standard ANF, constants do not become let-bound. clash-libBring an application of a DataCon or Primitive in ANF, when the argument is is considered non-representableK(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;< clash-libXXX: is given inverse topologically sorted binders, but returns topologically sorted binders'TODO: check further speed improvements: Store the processed binders in a `Map Expr LetBinding`: * Trades O(1) cons and O(n)*aeqTerm find for: * O(log n)*aeqTerm insert and O(log n)*aeqTerm Store the processed binders in a `AEQTrie Expr LetBinding` * Trades O(1) cons and O(n)*aeqTerm find for: * O(e) insert and O(e)  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.zipWithClash.Sized.Vector.mapClash.Sized.Vector.traverse#Clash.Sized.Vector.foldClash.Sized.Vector.foldrClash.Sized.Vector.dfoldClash.Sized.Vector.(++)Clash.Sized.Vector.headClash.Sized.Vector.tailClash.Sized.Vector.lastClash.Sized.Vector.initClash.Sized.Vector.unconcatClash.Sized.Vector.transposeClash.Sized.Vector.replicateClash.Sized.Vector.replace_intClash.Sized.Vector.imapClash.Sized.Vector.dtfoldClash.Sized.RTree.tdfoldClash.Sized.RTree.treplicate%Clash.Sized.Internal.BitVector.split#"Clash.Sized.Internal.BitVector.eq#Note [Unroll shouldSplit types] 1. Certain higher-order functions over Vec, such as map, have specialized code-paths to turn them into generate-for loops in HDL, instead of having to having to unroll/inline their recursive definitions, e.g. Clash.Sized.Vector.map Clash, in general, translates Haskell product types to VHDL records. This mostly works out fine, there is however one exception: certain synthesis tools, and some HDL simulation tools (like verilator), do not like it when the clock (and certain other global control signals) is contained in a record type; they want them to be separate inputs to the entity/module. And Clash actually does some transformations to try to ensure that values of type Clock do not end up in a VHDL record type.The problem is that the transformations in 2. never took into account the specialized code-paths in 1. Making the code-paths in 1. aware of the transformations in 2. is really not worth the effort for such a niche case. It's easier to just unroll the recursive definitions.See 8https://github.com/clash-lang/clash-compiler/issues/1606L(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2022, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;None &/02356789;<N(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None %&/02356789;< clash-libRemove unused let-bindings clash-libFlatten's letrecs after  inlineCleanup inlineCleanup0 sometimes exposes additional possibilities for caseCon, 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. 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-libSimplified CSE, only works on let-bindings, does an inverse topological sort of the let-bindings and then works from top to bottomXXX: Check whether inverse top-sort followed by single traversal removes as many binders as the previous "apply-until-fixpoint" approach in the presence of recursive groups in the let-bindings. If not but just for checking whether changes to transformation affect the eventual size of the circuit, it would be really helpful if we tracked circuit size in the regression/test suite. On the two examples that were tested, Reducer and PipelinesViaFolds, this new version of CSE removed the same amount of let-binders. clash-libEnsure that top-level lambda's eventually bind a let-expression of which the body is a variable-reference.O(C) 2015-2016, University of Twente, 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<[ clash-libThis 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 f(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<Ԏ-0(C) 2012-2016, University of Twente, (C) 2021, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None&/02356789;<! clash-libNormalisation transformation clash-lib+Topdown traversal, stops upon first successP(C) 2012-2016, University of Twente, 2016 , Myrtle Software Ltd, 2017 , Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<r clash-libA tree of identifiers and their bindings, with branches containing additional bindings which are used. See Clash.Driver.Types.Binding. clash-lib-Run a NormalizeSession in a given environment clash-libCheck whether the normalized bindings are non-recursive. Errors when one of the components is recursive. clash-libPerform general "clean up" of the normalized (non-recursive) function hierarchy. This includes:6Inlining functions that simply "wrap" another function clash-lib UniqueSupply clash-libGlobal Binders clash-lib#Hardcoded Type -> HWType translator clash-lib*Hardcoded evaluator for partial evaluation clash-lib,Hardcoded evaluator for WHNF (old evaluator) clash-lib=Map telling whether a components is part of a recursive group clash-lib topEntities clash-libNormalizeSession to run 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 , Google Inc., 2021 , QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None  #$%&/02356789;<1  clash-lib2Generate the context for a BlackBox instantiation. clash-libExtract a compiled primitive from a guarded primitive. Emit a warning if the guard wants to, or fail entirely. clash-lib#Emits (colorized) warning to stderr clash-lib(Determine if a term represents a literal clash-libTurn a mealyIO expression into a two sequential processes, one "initial" process for the starting state, and one clocked sequential process. clash-lib(Collect the sequential declarations for bindIO clash-lib(Collect the sequential declarations for appIO clash-libUnwrap the new-type wrapper for things of type SimIO, this is needed to allow applications of the `State# World` token to the underlying IO type.XXX: this is most likely needed because Ghc2Core that threw away the cast that this unwrapping; we should really start to support casts. 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 function clash-libBlackbox function name clash-lib6Identifiers binding the primitive/blackbox application clash-lib/Arguments of the primitive/blackbox application clash-libName of primitive clash-libBlackbox function name clash-libLHS of the original let-binder. Is used as a name hint to generate new names in case the argument is a declaration. clash-lib2Argument n (zero-indexed). Used for error message. clash-lib&Put BlackBox expression in parenthesis clash-lib(Treat BlackBox expression as declaration clash-libId to assign the result to clash-libPrimitive info clash-lib Arguments clash-libTick declarations clash-lib(Identifier to assign the final result to clash-lib Id to assign the final result to clash-libThe arguments to mealyIO clash-libIdentifier binding the encompassing primitive/blackbox application. Used as a name hint if  needs intermediate signals. clash-libThe function argument term  ;(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None  #$%&/02356789;<  clash-libGenerate a list of Declarations for a let-binder where the RHS is a function application clash-libGenerate a list of Declarations for a let-binder, return an empty list if the bound expression is represented by 0 bits clash-libGenerate a list of concurrent Declarations for a let-binder, return an empty list if the bound expression is represented by 0 bits clash-libGenerate a declaration that selects an alternative based on the value of the scrutinee clash-libGenerate an expression that projects a field out of a data-constructor.6Works for both product types, as sum-of-product types. clash-libGenerate an expression for a DataCon application occurring on the RHS of a let-binder clash-libGenerate an expression for a term occurring on the RHS of a let-binder clash-lib3Generate a component for a given function (caching) clash-libGenerate 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 names for all binders in  BindingMap, except for the ones already present in given identifier varenv. clash-libGenerate names for top entities. Should be executed at the very start of the synthesis process and shared between all passes. clash-lib)Generate a component for a given function  clash-libLHS of the let-binder clash-libName of the applied function clash-libFunction arguments clash-libTick declarations clash-lib$Concurrent of sequential declaration clash-libLHS of the let-binder clash-libRHS of the let-binder clash-libLHS of the let-binder clash-libRHS of the let-binder clash-lib)Projection must bind to a simple variable clash-libName hint for 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 projected clash-libHWType of the LHS of the let-binder, can multiple types when we're creating a "split" product type (e.g. a tuple of a Clock and Reset) clash-libName hint for result id clash-libApplied DataCon clash-libDataCon Arguments clash-libReturned expression and a list of generate BlackBox declarations clash-lib(Treat BlackBox expression as declaration clash-lib=Should the returned declarations be concurrent or sequential? clash-lib:Name hint for the id to (potentially) assign the result to clash-lib Term to convert to an expression clash-libReturned expression and a list of generate BlackBox declarations clash-libName of the function  clash-libWhether this we're compiling a testbench (suppresses certain warnings) clash-libGlobal binders clash-libTopEntity annotations clash-libTop entity names clash-lib#Hardcoded Type -> HWType translator clash-lib3Whether the backend supports ifThenElse expressions clash-libThe current HDL backend clash-libSeen components  clash-libHDL dir  clash-libComponent name prefix  clash-lib Name of the  topEntity clash-libWhether this we're compiling a testbench (suppresses certain warnings) clash-libOptions Clash was called with clash-lib,Custom bit representations for certain types clash-libGlobal binders clash-libTopEntity annotations clash-libPrimitive Definitions clash-lib TyCon cache clash-lib"Hardcode Type -> HWType translator clash-libIntWordInteger bit-width  clash-lib3Whether the backend supports ifThenElse expressions  clash-libThe current HDL backend  clash-libSeen components  clash-libHDL dir  clash-libSeen components clash-lib Action to run clash-libNew inline strategy enabled? clash-libPrefix clash-libIdentifier set to extend clash-libPre-generated names clash-libHDL to generate identifiers for clash-libName of the function clash-libCorresponding termQNone &/02356789;<jR(C) 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None #$%&/02356789;<j clash-lib!Clash generated file was modified clash-lib"Non-clash generated file was added clash-lib Clash generated file was removed clash-libInformation about the generated HDL between (sub)runs of the compiler clash-lib6Hash digest of the TopEntity and all its dependencies. clash-lib6Compiler flags used to achieve successful compilation:opt_inlineLimit opt_specLimit clash-libPorts in the generated  TopEntity. 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).This list is reverse topologically sorted. I.e., a component might depend on any component listed before it, but not after it. clash-libDesign entry point. This is usually the component annotated with a  TopEntity annotation. clash-lib4Names and hashes of all the generated files for the  TopEntity. Hashes are SHA256. clash-libDomains encountered in design clash-libDependencies of this design (fully qualified binder names). Is a transitive closure of all dependencies. clash-lib Just the  part of  clash-libPort name (as rendered in HDL) clash-libType name (as rendered in HDL) clash-libPort direction (in  out  inout) clash-libPort width in bits clash-libIs this port a clock? clash-libDomain this port belongs to. This is currently only included for clock, reset, and enable ports. TODO: add to all ports originally defined as a Signal too. clash-libDecode a hex digest to a ByteString. Returns a broken digest if the decode fails - hence it being marked as unsafe. clash-lib$Encode a ByteString to a hex digest. clash-libParse files part of a Manifest file clash-lib9Filename manifest file should be written to and read from clash-lib7Pretty print an unexpected modification as a list item. clash-libPretty print a list of unexpected modifications. Print a maximum of n modifications. clash-lib8Reads a manifest file. Does not return manifest file if:Caching is disabled through -fclash-no-cache.Manifest could not be found.Cache is stale. This could be triggered by any of the given arguments.Raises an exception if the manifest file or any of the files it is referring to was inaccessible. clash-lib/Determines whether the HDL directory the given LocatedManifest was found in contains any user made modifications. This is used by Clash to protect the user against lost work. clash-lib(Read a manifest file from disk. Returns > if file does not exist. Any other IO exception is re-raised. clash-libWrite manifest file to disk clash-libSerialize a manifest.!TODO: This should really yield a . clash-lib&Backend used to lookup port type names clash-lib Port name clash-lib Port type  clash-lib&Backend used to lookup port type names clash-libDomains encountered in design clash-libOptions Clash was run with clash-libComponent of top entity clash-libAll other entities clash-lib*Names of dependencies (transitive closure) clash-libFiles and their hashes clash-libHash returned by  clash-lib New manifest clash-libThis' top entity plus all that depend on it. clash-libCore expressions and entry point. Any changes in the call graph will trigger a recompile. clash-lib6Any changes in any primitive will trigger a recompile. clash-lib2Certain options will trigger recompiles if changed clash-libClash modification date clash-libPath to manifest file. clash-lib( Nothing if no manifest file was found , Nothing on stale cache, disabled cache, or not manifest file found )))S(C) 2015-2016, University of Twente, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;< 5 clash-libState for the  monad: clash-libRange slice, can be contiguous, or split into multiple sub-ranges clash-libSelect a sub-range from a range clash-libStarts and ends clash-libType of the projection clash-libRange selected so far  T(C) 2015-2016, University of Twente, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<  clash-libState for the no monad:U(C) 2019, Myrtle Software Ltd. 2020-2021, QBayLogic B.V. 2021, Myrtle.aiBSD2 (see the file LICENSE)%QBayLogic B.V. None #$&/02356789;<)h, clash-libThe state of a block. Contains a list of declarations and a the backend state. clash-libDeclarations store clash-libTracks how many times a higher order function has been instantiated. Needed to fill in the second field of  clash-lib Backend state clash-lib Options for  function. Use ; from package 'data-default' for a set of default options. clash-lib7Arguments to ignore (i.e., remove during normalization) Default: [] clash-libHDLs to use the blackbox for Default: all clash-lib:Does this blackbox assign its results to multiple binders?Default: False. clash-libCreate a blackBoxHaskell primitive. To be used as part of an annotation: {-# ANN myFunction (blackBoxHaskell 'myFunction 'myBBF def{_ignoredArguments=[1,2]}) #-} [1,2] would mean this blackbox ignores its second and third argument. clash-libA typed expression. clash-lib8A literal that can be used for hdl attributes. It has a  and  instances for convenience. clash-libThe low literal bit. clash-libThe high literal bit. clash-libRun a block declaration. Assign the result of the block builder to the result variable in the given blackbox context. clash-libRun a block declaration. clash-libExtract the elements of a vector expression and return expressions to them. If given expression is not an identifier, an intermediate variable will be used to assign the given expression to which is subsequently indexed. clash-libExtract the fields of a product type and return expressions to them. These new expressions are given unique names and get declared in the block scope. clash-libExtract the elements of a tuple expression and return expressions to them. These new expressions are given unique names and get declared in the block scope. clash-lib+Construct a fully defined BitVector literal clash-libConvert a bool to a bit. clash-libConvert an enable to a bit. clash-libUse to create an output  from a  . The expression given must be the identifier of the bool you wish to get assigned. Returns a reference to a declared   that should get assigned by something (usually the output port of an entity). clash-libUsed to create an output  from a  + of given size. Works in a similar way to  above.#TODO: Implement for (System)Verilog clash-libUsed to create an output   from a  + of given size. Works in a similar way to  above.#TODO: Implement for (System)Verilog clash-libUsed to create an output  from a number of  $s, using conjunction. Similarly to , it returns a list of references to declared values (the inputs to the function) which should get assigned by something---usually output ports of an entity.#TODO: Implement for (System)Verilog clash-libCreate a vector of s clash-lib2Construct a product type given its type and fields clash-libCreate an n-tuple of  clash-lib5Try to get the literal string value of an expression. clash-lib3Try to get the literal bool value of an expression. clash-lib2Try to get the literal nat value of an expression. clash-libAssign an input bitvector to an expression. Declares a new bitvector if the expression is not already a bitvector. clash-libAssign an output bitvector to an expression. Declares a new bitvector if the expression is not already a bitvector. clash-lib)Instantiate/call a higher-order function. clash-lib0Instantiate a component/entity in a block state. clash-libWires the two given s together using a newly declared signal with (exactly) the given name sigNm. The new signal has an annotated type, using the given attributes. clash-lib(The TExp inputs from a blackbox context. clash-lib&The TExp result of a blackbox context. clash-libGet an identifier to an expression, creating a new assignment if necessary. clash-lib And together (&&)3 two expressions, assigning it to a new identifier. clash-libNegate (not)1 an expression, assigning it to a new identifier. clash-lib.Creates a BV that produces the following vhdl:  (0 to n => ARG) #TODO: Implement for (System)Verilog clash-lib.Creates a BV that produces the following vhdl: ' std_logic_vector(resize(ARG, Size)) #TODO: Implement for (System)Verilog clash-lib(Allows assignment of a port to be "open" clash-lib blackbox name clash-libtemplate function name clash-lib0Options, see data structure for more information clash-lib block name clash-libblock builder yielding an expression that should be assigned to the result variable in the blackbox context clash-libpretty printed block clash-lib block name clash-lib block builder clash-libpretty printed block clash-lib!Name hint for intermediate signal clash-libVector expression clash-libVector elements clash-libProduct expression clash-lib"Name hints for element assignments clash-libTuple expression clash-lib"Name hints for element assignments clash-libBitVector size clash-libLiteral clash-lib!Name hint for intermediate signal clash-lib!Name hint for intermediate signal clash-lib!Name hint for intermediate signal clash-lib!Name hint for intermediate signal clash-lib!Name hint for intermediate signal clash-libElements of vector clash-libVector elements clash-libBitVector name hint clash-lib expression clash-libBitVector expression clash-libBitVector name hint clash-lib expression clash-lib bv expression clash-libBlackBoxContext, used for rendering higher-order function and error reporting clash-lib%Position of HO-argument. For example:8fold :: forall n a . (a -> a -> a) -> Vec (n + 1) a -> a/would have its HO-argument at position 0, while>iterateI :: forall n a. KnownNat n => (a -> a) -> a -> Vec n awould have it at position 1. clash-libResult type of HO function clash-libArguments and their types clash-libResult of the function clash-libType of instantiation clash-libcomponent/entity name clash-libinstantiation label clash-lib attributes clash-libin ports clash-lib out ports clash-libName given to signal clash-lib$expression the signal is assigned to clash-lib?expression (must be identifier) to which the signal is assigned clash-lib*the attributes to annotate the signal with clash-lib0desired new identifier name, will be made unique clash-libexpression to get identifier of clash-libidentifier to expression clash-lib name hint clash-liba clash-liba clash-liba && b clash-lib name hint clash-liba clash-libnot a clash-lib name hint clash-libSize (n) clash-libARG clash-lib(0 to n => ARG) clash-lib name hint clash-libSize (n) clash-libARG clash-lib#std_logic_vector(resize(ARG, Size))44V(C) 2020-2021 QBayLogicBSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<, clash-libBlackbox function for jp clash-lib8Type signature of function we're generating netlist for:2iterateI :: KnownNat n => (a -> a) -> a -> Vec n a clash-libCalculates the number of function calls needed for an evaluation of jl/, given the length of the vector given to fold. clash-libBlackbox function for jl clash-lib8Type signature of function we're generating netlist for:+fold :: (a -> a -> a) -> Vec (n + 1) a -> aThe implementation promises to create a (balanced) tree structure.  W(C) 2012-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017 , QBayLogic, Google Inc. 2020-2022, QBayLogic, 2022 , Google Inc.BSD2 (see the file LICENSE)%QBayLogic B.V. None #$%&/02356789;<?  clash-libWorker function of  clash-lib#Remove constraints such as 'a ~ 3'. clash-libGiven a list of all found top entities and _maybe_ a top entity (+dependencies) passed in by '-main-is', return the list of top entities Clash needs to compile. clash-lib.Get modification data of current clash binary. clash-lib7Create a set of target HDL files for a set of functions clash-libInterpret a specific function from a specific module. This action tries two things: Interpret without explicitly loading the module. This will succeed if the module was already loaded through a package database (set using interpreterArgs).If (1) fails, it does try to load it explicitly. If this also fails, an error is returned. clash-libList of known BlackBoxFunctions used to prevent Hint from firing. This improves Clash startup times. clash-libList of known TemplateFunctions used to prevent Hint from firing. This improves Clash startup times. clash-lib:Compiles blackbox functions and parses blackbox templates. clash-lib(Pretty print Components to HDL Documents clash-libCreate a shim for using verilator, which loads the entity and steps through simulation until finished. clash-libCreate an Edalize metadata file for using Edalize to build the project."TODO: Handle libraries. Also see: +https://github.com/olofk/edalize/issues/220 clash-lib)Prepares directory for writing HDL files. clash-libWrite a file to disk in chunks. Returns SHA256 sum of file contents. clash-libWrites a HDL file to the given directory. Returns SHA256 hash of written file. clash-libCopy given files clash-lib$Copy data files added with ~FILEPATH clash-libNormalize a complete hierarchy clash-lib#topologically sort the top entities  clash-lib3Source location of top entity (for error reporting) clash-libTop entity body clash-libPort annotations for top entity clash-libNew top entity with split ports (or the old one if not applicable) clash-lib Hardcoded  -> HWType translator clash-lib*Hardcoded evaluator for partial evaluation clash-lib,Hardcoded evaluator for WHNF (old evaluator) clash-libMain top entity to compile. If Nothing, all top entities in previous argument will be compiled. clash-lib(Extra search path (usually passed as -i) clash-libInterpreter args clash-libThe folder in which the GHC bootstrap libraries (base, containers, etc.) can be found clash-libModule function lives in clash-lib Function name clash-lib Type name ( or  ) clash-libImport directories (-i flag) clash-libPackage databases clash-libThe folder in which the GHC bootstrap libraries (base, containers, etc.) can be found clash-libPrimitive to compile clash-libBackend clash-libModule hierarchy root clash-libComponent names clash-libList of components clash-libKnown domains to configurations clash-lib Top component clash-libName of the manifest file clash-libThe pretty-printed HDL documents + The data files that need to be copied clash-libTop entity dependency map clash-libEdam files of each top entity clash-libFiles to include in Edam file clash-lib(updated map, edam) clash-libHDL directory to prepare clash-libRelevant options: -fclash-no-clean clash-lib4Did directory contain unexpected modifications? See  clash-libDirectory to copy files to clash-lib(filename, content) clash-lib"Import directories passed in with -i clash-libDirectory to copy to clash-lib 9(name of newly made file in HDL output dir, file to copy) clash-libSHA256 hashes of written files clash-lib All bindings clash-lib Hardcoded  -> HWType translator clash-lib*Hardcoded evaluator for partial evaluation clash-lib,Hardcoded evaluator for WHNF (old evaluator) clash-lib TopEntities clash-lib Unique supply clash-libroot of the hierarchyX(C) 2015-2016, University of Twente, 2017-2018, Google Inc., 2021-2022, QBayLogic B.V.BSD2 (see the file LICENSE)%QBayLogic B.V. None &/02356789;<@ clash-libState for the  monad:qrsqrtuvwuxyuxzux{ux|ux}ux~uxux                                                                                                                 eet                                                                       ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " # # # $ $ $ $ $ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% % % % % % % % % % % & & & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ( ( ( ( ( ( ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ + + + + + + + + ++ + + + +                                                                                                                                                                                                                                                                                 i                  ,,,,----- --------------------- ---- --------------------------- -- -----------------........//////////////////////////001111111123333334566666666667777777777778888888999999999999999999999999::;;;;;;;;;<<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????@ABgCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEE========================FFFFFFFFFFFFFFFFFFFFFFGGGHHHHHHIIIIIJJKKKLLLLLLLLLLMMMMMMMMNNNNNNOOOOO000PPPPPPPPPPPPP::::::::::;;;;;;;;;QRRRRRRRRRR RRRRRRRRRRRRRRR R R RRRRRRRRRRRRRRRRRRRRRRRRRRRRR R RR SSSSSSSSSSSSSSTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU U UUUUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXZZZZZZZk[\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ``aaddddddddeeee LS Xclash-lib-1.6.3-inplaceClash.Core.Name Clash.UtilData.Text.Prettyprint.Doc.Extra Clash.DebugClash.Edalize.EdamClash.Netlist.TypesClash.Netlist.Id Clash.Util.EqClash.Util.Interpolate Clash.Pretty Clash.UniqueClash.Core.LiteralClash.Netlist.Id.CommonClash.Core.TyConClash.Core.TypeClash.Core.TermClash.Core.VarClash.Core.SubstClash.Core.DataConClash.Primitives.UtilClash.Core.TysPrimClash.Netlist.BlackBox.TypesClash.Primitives.TypesClash.Netlist.BlackBox.ParserClash.Core.PrettyClash.Core.VarEnvClash.Driver.TypesClash.Core.FreeVarsClash.Core.HasFreeVarsClash.Core.EqSolverClash.Core.TermLiteral.THClash.Core.TermLiteralClash.Core.HasTypeClash.Core.UtilClash.Normalize.PrimitivesClash.Rewrite.WorkFree!Clash.Core.PartialEval.NormalFormClash.Core.PartialEval.AsTermClash.Core.PartialEval.MonadClash.Core.PartialEvalClash.Core.TermInfoClash.Core.Evaluator.Types Clash.BackendClash.Verification.PrettyClash.Rewrite.TypesClash.Rewrite.CombinatorsClash.Normalize.TypesClash.Normalize.Strategy Clash.Primitives.Sized.ToIntegerClash.Primitives.Sized.SignedClash.Primitives.GHC.LiteralClash.Primitives.GHC.WordClash.Primitives.GHC.IntClash.Netlist.Id.VerilogClash.Netlist.Id.VHDLClash.Netlist.Id.SystemVerilogClash.Netlist.Id.InternalClash.Netlist.BlackBox Clash.Netlist,Clash.Annotations.BitRepresentation.ClashLibClash.Netlist.BlackBox.UtilClash.Netlist.UtilClash.Rewrite.Util)Clash.Normalize.Transformations.XOptimize,Clash.Normalize.Transformations.SeparateArgs)Clash.Normalize.Transformations.MultiPrim)Clash.Normalize.Transformations.EtaExpand#Clash.Normalize.PrimitiveReductions$Clash.Normalize.Transformations.CaseClash.Normalize.UtilClash.Util.Graph*Clash.Normalize.Transformations.Specialize$Clash.Normalize.Transformations.Cast#Clash.Normalize.Transformations.ANF&Clash.Normalize.Transformations.Reduce&Clash.Normalize.Transformations.InlineClash.Primitives.Intel.ClockGen&Clash.Normalize.Transformations.Letrec#Clash.Normalize.Transformations.DECClash.NormalizeClash.Primitives.VerificationClash.Driver.ManifestClash.Backend.VerilogClash.Backend.VHDLClash.Primitives.DSLClash.Primitives.Sized.Vector Clash.DriverClash.Backend.SystemVerilogData.IntMap.ExtraData.List.Extra Data.List mapAccumLData.Map.Ordered.ExtraData.Monoid.ExtraData.Primitive.ByteArray.ExtraData.Set.Ordered.ExtraData.Text.ExtraGHC.BasicTypes.ExtraGHC.SrcLoc.ExtraPaths_clash_libData.Aeson.ExtraClash.Normalize.TransformationssetupMultiResultPrim Clash.MagicsetNameClash.Sized.Vectormapfold!Clash.Annotations.TopEntity.ExtraClash.Netlist.VHDLVHDLMiterateIghcSrcLoc noSrcSpanSrcSpanprettyprinter-1.7.1-a064bcf17a741e5d02a40ee1e0fef7a5004494d834bccc756dcaa5b087b358e3Prettyprinter.Render.Text renderLazyPrettyprinter.Internal layoutCompact layoutPretty UnboundedAvailablePerLine PageWidthlayoutPageWidth LayoutOptions debugIsOntraceIf VivadoOptions vivadoPartQuartusOptionsquartusBoardDevIndex quartusFamily quartusDevice quartusOptsquartusDseOptsModelsimOptions msVlogOpts msVsimOpts IcarusOptions icarusOptsicarusTimeScale GhdlOptionsghdlAnalyseOpts ghdlRunOpts EdamToolsetGhdletIcarus etModelsim etQuartusetVivado EdamFileTypeUnknown VhdlSource VerilogSourceSystemVerilogSource TclSourceQSYSSDCEdamFileefNameefType efLogicalNameEdamedamProjectName edamTopEntity edamFilesedamToolOptionspprEdam$fDefaultGhdlOptions$fDefaultIcarusOptions$fDefaultModelsimOptions$fDefaultQuartusOptions$fDefaultVivadoOptions$fDefaultEdamTools$fEqEdamFileType$fShowEdamFileType PreserveCaseToLower NetlistMonadHasIdentifierSet identifierSetIdentifierSetMonadidentifierSetM TopEntityTBlackBoxExpr Component DeclarationHWType IdentifierSet IdentifierIdentifierTypetoTextfastEqfastEqByformatitoString $fShowLine $fShowNode ClashPretty clashPrettyunsafeLookupEnvWorddefaultPprWidthshowDocremoveAnnotations fromPrettyUniqSetUniqMap Uniquable getUnique setUniqueUnique emptyUniqMap unitUniqMap nullUniqMap extendUniqMapextendUniqMapWithextendListUniqMap lookupUniqMaplookupUniqMap' elemUniqMapelemUniqMapDirectlynotElemUniqMap filterUniqMap delUniqMapdelListUniqMap unionUniqMapunionUniqMapWithdifferenceUniqMap listToUniqMap toListUniqMap eltsUniqMap mapUniqMap keysUniqMapmapMaybeUniqMapfoldrWithUniquefoldlWithUnique' emptyUniqSet unitUniqSet extendUniqSet unionUniqSet elemUniqSetnotElemUniqSetelemUniqSetDirectly nullUniqSet lookupUniqSetdelUniqSetDirectly eltsUniqSet mkUniqSetuniqMapToUniqSet subsetUniqSetdisjointUniqSetdifferenceUniqSet$fUniquableInt $fShowUniqMap$fClashPrettyUniqMap$fClashPrettyUniqSet$fFoldableUniqSet$fSemigroupUniqSet$fMonoidUniqSet$fNFDataUniqSet$fBinaryUniqSet$fFunctorUniqMap$fFoldableUniqMap$fTraversableUniqMap$fSemigroupUniqMap$fMonoidUniqMap$fNFDataUniqMap$fBinaryUniqMapLiteralIntegerLiteral IntLiteral WordLiteral Int64Literal Word64Literal StringLiteral FloatLiteral DoubleLiteral CharLiteralNaturalLiteralByteArrayLiteral $fEqLiteral $fOrdLiteral $fShowLiteral$fGenericLiteral$fNFDataLiteral$fHashableLiteral$fBinaryLiteralparseWhiteSpace isWhiteSpaceparsePrintable parseSingleparseMaybeSingle parseLetter parseDigitparseLetterOrDigitparseUnderscore parseDollarparseTabparseBackslash failNonEmpty repeatParseN repeatParsezEncode prettyName maybeTuple parseTupleDoc layoutOneLine renderOneLineintintegercharlbracerbracecolonsemiequalscommadotlparenrparenspacebracketsbracestupled<+>vcathcatnestindentparensemptyDoc punctuate encloseSepencloselineline'softline softline'prettystringSstringsquotesdquotesalignhsepvsepisEmptyfillcolumnnestingflatAltcommentsquote $fIsStringfNameSortUserSystemInternalOccNameNamenameSortnameOccnameUniqnameLoc mkUnsafeNamemkUnsafeSystemNamemkUnsafeInternalName appendToName$fUniquableName$fHashableName $fOrdName$fEqName $fShowName $fGenericName $fNFDataName $fBinaryName $fEqNameSort $fOrdNameSort$fShowNameSort$fGenericNameSort$fNFDataNameSort$fHashableNameSort$fBinaryNameSort TyConNameTyConKiNameTyNameKindType mkTyConTyTmNameTermTyVarIdIdScopeGlobalIdLocalIdVarvarNamevarUniqvarTypeidScopeAttr' BoolAttr' IntegerAttr' StringAttr'attrName modifyVarNamemkTyVarmkId mkLocalId mkGlobalId isGlobalId isLocalId setIdScope$fUniquableVar$fOrdVar$fEqVar $fHashableVar $fShowVar $fGenericVar $fNFDataVar $fBinaryVar $fShowIdScope$fGenericIdScope$fNFDataIdScope$fHashableIdScope$fBinaryIdScope $fEqIdScope $fOrdIdScope $fEqAttr' $fShowAttr' $fNFDataAttr'$fGenericAttr'$fHashableAttr' $fOrdAttr' $fBinaryAttr'aeqType substTyWith DcStrictnessStrictLazyDcNameConTagDataConMkDatadcNamedcUniqdcTagdcType dcUnivTyVars dcExtTyVarsdcArgTys dcArgStrict dcFieldLabels$fUniquableDataCon $fOrdDataCon $fEqDataCon $fShowDataCon$fGenericDataCon$fNFDataDataCon$fBinaryDataCon$fGenericDcStrictness$fNFDataDcStrictness$fEqDcStrictness$fHashableDcStrictness$fBinaryDcStrictness AlgTyConRhs DataTyConNewTyCondataConsdataCon ntEtadRhsTyConMapAlgTyConPromotedDataConFunTyCon PrimTyCon tyConUniq tyConName tyConKind tyConArityalgTcRhs isClassTc tyConData tyConSubst mkKindTyConisTupleTyConLike tyConDataConsisPrimTc isNewTypeTc isPromotedDc$fUniquableTyCon $fEqTyCon $fShowTyCon$fGenericTyCon $fNFDataTyCon $fBinaryTyCon$fShowAlgTyConRhs$fGenericAlgTyConRhs$fNFDataAlgTyConRhs$fBinaryAlgTyConRhs MonadUnique getUniqueMClashException assertPanicassertPprPanicpprPanic callStackDoc warnPprTracepprTrace pprTraceDebugpprDebugAndThencurLoc makeCached makeCachedU makeCachedO indexNote' indexNoteclashLibVersionflogBaseclogBasepkgIdFromTypeablereportTimeDifforElseswantedLanguageExtensionsunwantedLanguageExtensions$fExceptionClashException$fShowClashException$fMonadUniqueStateTdecodeOrErrYamldecodeOrErrJson KindOrTypeLitTyNumTySymTyConstTyArrowTypeViewFunTyTyConApp OtherTypeVarTyForAllTyAppTyAnnTypevarAttrstyViewcoreView coreView1mkFunTy mkTyConAppsplitTyConAppMisPolyTy splitFunTy splitFunTyssplitFunForallTy mkPolyFunTysplitCoreFunForallTy isPolyFunTyisPolyFunCoreTy typeAttrsisFunTy applyFunTy findFunSubstreduceTypeFamilyisTypeFamilyApplication isIntegerTy normalizeType isClassTy$fHashableType$fShowTypeView $fShowType $fGenericType $fNFDataType $fBinaryType $fEqLitTy $fOrdLitTy $fShowLitTy$fGenericLitTy $fNFDataLitTy$fHashableLitTy $fBinaryLitTy $fEqConstTy $fOrdConstTy $fShowConstTy$fGenericConstTy$fNFDataConstTy$fHashableConstTy$fBinaryConstTyliftedTypeKind typeNatKindtypeSymbolKind intPrimTy integerPrimTy charPrimTy stringPrimTy voidPrimTy wordPrimTy int64PrimTy word64PrimTy floatPrimTy doublePrimTy naturalPrimTybyteArrayPrimTyeqPrimTy tysPrimMapContext CoreContextAppFunAppArgTyAppC LetBindingLetBodyLamBody TyLamBodyCaseAlt CaseScrutCastBodyTickCAltPatDataPatLitPat DefaultPatBindNonRecRecWorkInfo WorkConstant WorkNever WorkVariable WorkAlways WorkIdentity MultiPrimInfo mpi_primInfo mpi_resultDcmpi_resultTypes PrimUnfolding NoUnfolding UnfoldingPrimInfoprimNameprimType primWorkInfoprimMultiResult primUnfolding IsMultiPrim SingleResult MultiResultNameMod PrefixName SuffixName SuffixNamePSetNameTickInfoDeDupNoDeDupDataPrimLamTyLamAppTyAppLetCaseCastTickLetrecpatIdspatVars mkAbstractionmkTyLamsmkLamsmkAppsmkTmAppsmkTyAppsmkTicksisLambdaBodyCtx isTickCtx stripTicks stripAllTicks collectArgs collectTickscollectArgsTicks collectBndrsprimArgpartitionTickswalkTermcollectTermIdsvarToId$fEqCoreContext$fShowCoreContext$fGenericCoreContext$fNFDataCoreContext$fBinaryCoreContext $fShowTerm $fGenericTerm $fNFDataTerm $fBinaryTerm$fEqPat$fOrdPat $fShowPat $fGenericPat $fNFDataPat $fBinaryPat$fEqBind $fShowBind $fGenericBind $fNFDataBind$fHashableBind $fBinaryBind $fFunctorBind$fShowPrimInfo$fGenericPrimInfo$fNFDataPrimInfo$fBinaryPrimInfo $fEqWorkInfo$fShowWorkInfo$fGenericWorkInfo$fNFDataWorkInfo$fHashableWorkInfo$fBinaryWorkInfo$fShowPrimUnfolding$fGenericPrimUnfolding$fNFDataPrimUnfolding$fEqPrimUnfolding$fHashablePrimUnfolding$fBinaryPrimUnfolding$fShowIsMultiPrim$fGenericIsMultiPrim$fNFDataIsMultiPrim$fEqIsMultiPrim$fHashableIsMultiPrim$fBinaryIsMultiPrim $fEqTickInfo$fShowTickInfo$fGenericTickInfo$fNFDataTickInfo$fBinaryTickInfo $fEqNameMod $fOrdNameMod $fShowNameMod$fGenericNameMod$fNFDataNameMod$fHashableNameMod$fBinaryNameModHdlSynVivadoQuartusOtherDeclElementTextResultArgArgGenConstLitToVarSymTypTypMErrTypElemCompName IncludeName IndexTypeSizeLengthDepthMaxIndexFilePathTemplateGenIFAndIW64CmpLEBVSelIsLitIsVar IsActiveHighTagPeriod LongestPeriod ActiveEdgeIsSync IsInitDefinedIsActiveEnable IsUndefinedStrCmp OutputWireRegVarsGenSymRepeatDevNullSigDCtxNameBlackBoxTemplateBlackBoxFunction BlackBoxMeta bbOutputRegbbKind bbLibrary bbImportsbbFunctionPlurality bbIncludes bbRenderVoid bbResultNames bbResultInits TemplateKindTDeclTExpr RenderVoid NoRenderVoidemptyBlackBoxMeta $fShowElement$fGenericElement$fNFDataElement$fBinaryElement $fEqElement$fHashableElement $fShowDecl $fGenericDecl $fNFDataDecl $fBinaryDecl$fEqDecl$fHashableDecl $fEqHdlSyn $fShowHdlSyn $fReadHdlSyn$fGenericHdlSyn$fNFDataHdlSyn$fBinaryHdlSyn$fHashableHdlSyn$fShowTemplateKind$fEqTemplateKind$fGenericTemplateKind$fNFDataTemplateKind$fBinaryTemplateKind$fHashableTemplateKind$fShowRenderVoid$fGenericRenderVoid$fNFDataRenderVoid$fBinaryRenderVoid$fEqRenderVoid$fHashableRenderVoid$fFromJSONRenderVoid PrimitiveBlackBoxHaskellnameworkInfo renderVoid multiResultkindwarning outputReg librariesimportsfunctionPluralityincludes resultNames resultInitstemplate usedArguments functionNamefunctionprimSort UsedArgumentsIgnoredArgumentsTemplateFormat TTemplateTHaskellTemplateSourceTFileTInlineBlackBoxFunctionNamePrimMapCompiledPrimMapGuardedCompiledPrimitiveCompiledPrimitiveResolvedPrimMapGuardedResolvedPrimitiveResolvedPrimitiveUnresolvedPrimitive$fShowBlackBoxFunctionName$fFromJSONPrimitive$fShowPrimitive$fGenericPrimitive$fNFDataPrimitive$fBinaryPrimitive $fEqPrimitive$fHashablePrimitive$fFunctorPrimitive$fShowUsedArguments$fGenericUsedArguments$fEqUsedArguments$fHashableUsedArguments$fNFDataUsedArguments$fBinaryUsedArguments$fShowTemplateFormat$fGenericTemplateFormat$fEqTemplateFormat$fHashableTemplateFormat$fNFDataTemplateFormat$fShowTemplateSource$fEqTemplateSource$fHashableTemplateSource$fGenericTemplateSource$fNFDataTemplateSource$fEqBlackBoxFunctionName$fGenericBlackBoxFunctionName$fNFDataBlackBoxFunctionName$fBinaryBlackBoxFunctionName$fHashableBlackBoxFunctionNamerunParse PrettyPrecpprPrecpprPrec'ClashDoc SyntaxElementKeywordLitS QualifierTickyClashAnnotation AnnContext AnnSyntax PrettyOptionsdisplayUniques displayTypesdisplayQualifiers displayTickspprppr'fromPprshowPprshowPpr' tracePprIdtracePpr$fClashPrettyVar$fClashPrettyTerm $fPrettyLitTy$fClashPrettyType$fClashPrettyName$fDefaultPrettyOptions$fPrettyPrecLiteral$fPrettyPrecDataCon$fPrettyPrecVar$fPrettyPrecSrcSpan$fPrettyPrecTickInfo$fPrettyPrecTerm$fPrettyPrecLitTy$fPrettyPrecTyCon$fPrettyPrecType$fPrettyPrecText$fPrettyPrec(,)$fPrettyPrec[]$fPrettyPrecName$fPrettyPrecPat $fEqTypePrec $fOrdTypePrec$fEqClashAnnotation$fEqSyntaxElement$fShowSyntaxElementRnEnv InScopeSetVarSetVarEnv emptyVarEnv unitVarEnv lookupVarEnvlookupVarEnvDirectly lookupVarEnv' delVarEnv delVarEnvList extendVarEnvextendVarEnvWithextendVarEnvList nullVarEnv unionVarEnvunionVarEnvWithmkVarEnv mapVarEnvmapMaybeVarEnvfoldlWithUniqueVarEnv' eltsVarEnv elemVarEnv notElemVarEnv emptyVarSet unitVarSet unionVarSetdifferenceVarSet elemVarSet notElemVarSet subsetVarSetdisjointVarSet nullVarSetdelVarSetByKeymkVarSet eltsVarSetextendInScopeSetextendInScopeSetList unionInScope varSetInScope lookupInScopeelemInScopeSetelemUniqInScopeSetnotElemInScopeSet mkInScopeSetemptyInScopeSetuniqAway uniqAway'mkRnEnvrnOccLTyrnOccRTyrnTyBndr rnTyBndrsrnOccLIdrnOccRIdrnTmBndr rnTmBndrs$fClashPrettyInScopeSet$fGenericInScopeSet$fNFDataInScopeSet$fBinaryInScopeSetSdcInfosdcClock ClashOpts opt_werroropt_inlineLimit opt_specLimitopt_inlineFunctionLimitopt_inlineConstantLimitopt_evaluatorFuelLimit opt_debug opt_cachehdl opt_clear opt_primWarn opt_color opt_intWidth opt_hdlDir opt_hdlSynopt_errorExtraopt_importPathsopt_componentPrefixopt_newInlineStratopt_escapedIdsopt_lowerCaseBasicIds opt_ultraopt_forceUndefined opt_checkIDiropt_aggressiveXOptopt_aggressiveXOptBBopt_inlineWFCacheLimit opt_edalizeopt_renderEnums DebugOptsdbg_invariantsdbg_transformationInfodbg_transformationsdbg_countTransformationsdbg_transformationsFromdbg_transformationsLimitdbg_historyFileTransformationInfoNone FinalTerm AppliedName AppliedTermTryNameTryTerm DomainMap BindingMapBinding bindingId bindingLoc bindingSpec bindingIsPrim bindingTermbindingRecursiveIsPrimIsFun ClashDesigndesignEntities designDomainsdesignBindingsClashEnvenvOpts envTyConMapenvTupleTyCons envPrimitivesenvCustomReprs isDebugging hasDebugInfohasTransformationInfo debugNone debugSilent debugFinal debugCount debugNamedebugTry debugApplieddebugAll defClashOptspprSDC$fNFDataClashDesign$fHashableDebugOpts$fHashableClashOpts $fEqClashOpts$fNFDataClashOpts$fGenericClashEnv$fNFDataClashEnv$fShowClashOpts$fGenericDebugOpts$fNFDataDebugOpts$fShowDebugOpts $fEqDebugOpts$fEqTransformationInfo$fGenericTransformationInfo$fHashableTransformationInfo$fOrdTransformationInfo$fReadTransformationInfo$fShowTransformationInfo$fNFDataTransformationInfo$fBinaryBinding$fFunctorBinding$fGenericBinding$fNFDataBinding $fShowBinding$fBinaryIsPrim $fEqIsPrim$fGenericIsPrim$fNFDataIsPrim $fShowIsPrim typeFreeVars typeFreeVars'localVarsDoNotOccurInglobalIdOccursIn freeLocalVarsfreeIds freeLocalIds globalIdstermFreeTyVars termFreeVars'countFreeOccurances HasFreeVars freeVarsOfisClosed elemFreeVarsnotElemFreeVarssubsetFreeVarsdisjointFreeVars$fHasFreeVarsf$fHasFreeVarsType$fHasFreeVarsTermTypeEqSolutionSolutionAbsurdSolution NoSolution catSolutionssolveNonAbsurdssolveEqsolveAdd normalizeAdd isAbsurdPat isAbsurdEqpatEqstypeEq$fShowTypeEqSolution$fEqTypeEqSolutionSubst substInScope substTmEnv substTyEnv substGblEnvTvSubst TvSubstEnvmkSubst mkTvSubst extendIdSubstextendIdSubstListextendGblSubstList extendTvSubstextendTvSubstListextendInScopeIdextendInScopeIdListsubstTy substTyInVarsubstGlobalsInExistentialssubstInExistentialsListsubstInExistentials maybeSubstTmsubstTmsubstAltsubstId deShadowTerm deShadowAltdeshadowLetExpr freshenTmeqTypeaeqTermeqTerm $fOrdTerm$fHashableTerm$fEqTerm $fOrdType$fEqType$fClashPrettyTvSubst $fOrdTickInfodcName'deriveTermToData TermLiteral termToDatatermToDataError$fTermLiteralProperty'$fTermLiteralAssertion'$fTermLiteralRenderAs$fTermLiteralBool$fTermLiteralMaybe$fTermLiteral(,)$fTermLiteralNatural$fTermLiteralChar$fTermLiteralInteger$fTermLiteralWord$fTermLiteralInt$fTermLiteralText$fTermLiteral[]$fTermLiteralTerm InferTypeinferCoreTypeOfHasType coreTypeOf coreKindOfinferCoreKindOfapplyTypeToArgs piResultTy piResultTys $fHasTypeVar $fHasTypeType$fHasTypeTyCon$fHasTypePrimInfo$fHasTypeLiteral$fHasTypeDataCon$fInferTypeTerm$fInferTypeType Projections listToLets undefinedTyunsafeCoerceTymkVec appendToVec extractElems extractTElemsmkRTree isSignalTypeisEnableisClockOrReset tyNatSizemkUniqSystemTyVarmkUniqSystemIdmkUniqInternalIddataConInstArgTysEdataConInstArgTysprimCoprimUCoundefinedPrimsundefinedXPrims substArgTys tyLitShow shouldSplit shouldSplit0splitShouldSplitstripIPinverseTopSortLetBindingssccLetBindingsmkSelectorCasemkWildValBinder mkInternalVar removedArg undefined undefinedX isWorkFree isConstantisConstantNotClockResetisWorkFreeClockOrResetOrEnable isWorkFreeIsh GlobalEnv genvBindings genvTyConMap genvInScope genvSupplygenvFuelgenvHeapgenvAddr genvWorkCacheLocalEnv lenvContext lenvTypes lenvValueslenvFuellenvKeepLiftedNormalNNeutralNLiteralNDataNLamNTyLamNCastNTickValueVNeutralVLiteralVDataVLamVTyLamVCastVTickVThunkNeutralNeVarNePrimNeAppNeTyAppNeLetNeCaseArgs mkValueTicks stripValuecollectValueTicks isUndefined isUndefinedX workFreeCache $fShowNormal$fShowLocalEnv $fShowValue $fShowNeutralAsTermasTerm$fAsTermNormal $fAsTermValue$fAsTermNeutralEvalrunEval getLocalEnv setLocalEnvmodifyLocalEnv getGlobalEnvmodifyGlobalEnv getContext withContext findTyVar withTyVar withTyVars getTvSubstfindIdwithIdwithIds withoutId findBindingreplaceBindinggetRefsetRefisKeepingLifted keepLiftedgetFuelwithFuel preserveFuel getTyConMap getInScope getUniqueIdgetUniqueTyVar workFreeValue $fFunctorEval$fApplicativeEval$fAlternativeEval $fMonadEval$fMonadFailEval $fMonadIOEval$fMonadReaderLocalEnvEval$fMonadStateGlobalEnvEval$fMonadThrowEval$fMonadCatchEval$fMonadMaskEval EvaluatorevalWhnfquoteNfwhnfnf mkGlobalEnvtermSize multPrimErrsplitMultiPrimArgsmultiPrimInfo' multiPrimInfoisFun isPolyFunisLetisVar isLocalVarisConisPrimisTickisCastLambdaTyLambdaDCPrimValSuspend TickValue CastValue StackFrameUpdateApply Instantiate PrimApply ScrutiniseTickishStackPureHeapPrimHeapMachine mHeapPrim mHeapGlobal mHeapLocalmStackmSupply mScopeNamesmTerm PrimUnwindPrimStepUnwindStepstepunwindprimStep primUnwindwhnf' unwindStack valToTerm forcePrims primCount primLookup primInsert primUpdate heapLookup heapContains heapInsert heapDelete stackPushstackPop stackClear stackNullgetTermsetTerm$fClashPrettyStackFrame $fShowMachine$fShowStackFrameBackend initBackendhdlKindprimDirs extension extractTypesgenHDL mkTyPackagehdlType hdlHWTypeKindhdlTypeErrValue hdlTypeMark hdlRecSelhdlSiggenStmtinstexpriwWidthtoBVfromBVhdlSyn setModName setTopName getTopName setSrcSpan getSrcSpan blockDecl addIncludes addLibraries addImports addAndSetData getDataFilesaddMemoryDataFilegetMemoryDataFilesifThenElseExpraggressiveXOptBB renderEnumsdomainConfigurationssetDomainConfigurationsHWKind PrimitiveType SynonymTypeUserType RenderEnumsAggressiveXOptBBUsageExternalModName primsRootclashVeremptyDomainMapDeclarationType Concurrent Sequential NetlistIdCoreIdMultiIdTemplateFunction BBTemplate BBFunctionBBHashBBNameBlackBoxContextbbName bbResultsbbInputs bbFunctions bbQsysIncNamebbLevel bbCompName bbCtxNameBitHLUZNumLitBitLit BitVecLitBoolLitVecLit StringLitDataTag BlackBoxEToBvFromBv IfThenElseNoopModifierIndexed VecAppend RTreeAppendSlicedNested PortDirectionInOut WireOrRegWireRegEntityOrComponentEntityCompEmptySeq AlwaysClockedInitial AlwaysCombSeqDeclBranch AssignmentCondAssignmentInstDecl BlackBoxDNetDecl'TickDeclConditionalDeclPortMapIndexedPortMap NamedPortMapVoidStringIntegerBool BitVectorIndexSignedUnsignedVectorMemBlobRTreeSumProductSPClockResetEnable BiDirectionalCustomSP CustomSum CustomProduct Annotated KnownDomainFileType DomainNameFilteredHWTypeIsVoid componentNameinputsoutputs declarationsCommentOrDirectiveComment Directive SomeBackendComponentPrefixcomponentPrefixTopcomponentPrefixOther NetlistState _bindings _components _primitives_typeTranslator_tcCache _curCompNm _intWidth_seenIds _seenComps_seenPrimitives_componentNames_topEntityAnns_hdlDir _curBBlvl _customReprs _clashOpts _isTestBench _backEndITE_backend _htyCache ComponentMap ComponentMeta cmWereVoidscmLoccmScope NetlistEnv _prefixName _suffixName_setName RawIdentifierUniqueIdentifier i_baseNamei_baseNameCaseFoldi_extensionsRevi_idTypei_hdl i_provenanceis_allowEscapedis_lowerCaseBasicIdsis_hdl is_freshCacheis_storeBasicExtendedIdentifierText FreshCacheHWMap runNetlistExpandedPortNameExpandedPortProductExpandedTopEntity et_inputs et_outputtopId topAnnotationtopIsTestBenchNetDeclidentifierKey#isBiDirectional findClocks hwTypeDomain hwTypeAttrstoBit netlistId1 netlistTypes netlistTypes1emptyBBContext$fOrdIdentifier$fEqIdentifier$fHashableIdentifier$fNFDataWireOrReg$fBinaryTemplateFunction$fNFDataTemplateFunction$fShowBlackBox $fNFDataExpr$fNFDataDeclaration$fShowNetlistId$fFunctorNetlistMonad$fMonadNetlistMonad$fApplicativeNetlistMonad#$fMonadReaderNetlistEnvNetlistMonad$$fMonadStateNetlistStateNetlistMonad$fMonadIONetlistMonad$fMonadFailNetlistMonad$fShowComponent$fGenericComponent$fNFDataComponent$fShowBlackBoxContext$fGenericBlackBox$fNFDataBlackBox$fBinaryBlackBox $fShowExpr$fShowDeclaration $fShowSeq $fShowPortMap$fEqBit $fShowBit$fLiftLiftedRepBit$fShowModifier$fShowExpandedTopEntity$fFunctorExpandedTopEntity$fFoldableExpandedTopEntity$fTraversableExpandedTopEntity$fShowExpandedPortName$fFunctorExpandedPortName$fFoldableExpandedPortName$fTraversableExpandedPortName$fEqFilteredHWType$fShowFilteredHWType $fEqHWType $fOrdHWType $fShowHWType$fGenericHWType$fNFDataHWType$fHashableHWType$fEqPortDirection$fOrdPortDirection$fShowPortDirection$fGenericPortDirection$fNFDataPortDirection$fHashablePortDirection$fShowWireOrReg$fGenericWireOrReg$fShowEntityOrComponent$fShowCommentOrDirective$fShowComponentPrefix$fGenericComponentMeta$fShowComponentMeta$fNFDataComponentMeta$fGenericIdentifierSet$fNFDataIdentifierSet$fShowIdentifierSet$fShowIdentifier$fGenericIdentifier$fNFDataIdentifier$fShowIdentifierType$fGenericIdentifierType$fNFDataIdentifierType$fEqIdentifierType$fShowPreserveCase$fGenericPreserveCase$fNFDataPreserveCase$fEqPreserveCase$fBinaryPreserveCase$fHashablePreserveCase$fGenericTopEntityT$fShowTopEntityT$fEqTopEntityT prefixName suffixName backEndITEbackendbindings clashOptscomponentNames componentscurBBlvl curCompNm customReprshdlDirhtyCacheintWidth isTestBench primitives seenCompsseenIdsseenPrimitivestcCache topEntityAnnstypeTranslator$fHasIdentifierSetIdentifierSet$fIdentifierSetMonadAp$fIdentifierSetMonadStateT$fIdentifierSetMonadStateT0 $fIdentifierSetMonadNetlistMonad pprPropertypprPslPropertypprSvaPropertypprYosysSvaProperty RewriteState_transformCounter_transformCounters _uniqSupply_curFun _nameCounter _globalHeap_workFreeBinders_extra RewriteStept_ctxt_namet_bndrSt_beforet_after$fShowRewriteStep$fGenericRewriteStep$fNFDataRewriteStep$fBinaryRewriteStep RewriteEnv _clashEnv _peEvaluator _evaluator _topEntitiescurFunextra globalHeap nameCountertransformCountertransformCounters uniqSupplyworkFreeBindersRewrite TransformTransformContext tfInScope tfContext RewriteMonadRunRclashEnv evaluator peEvaluator topEntities debugOptsaggressiveXOpt tupleTcCache fuelLimit inlineLimitinlineFunctionLimitinlineConstantLimitinlineWFCacheLimitnewInlineStrategyspecializationLimitnormalizeUltrarunRcensor$fMonadUniqueRewriteMonad#$fMonadReaderRewriteEnvRewriteMonad$fMonadWriterAnyRewriteMonad$$fMonadStateRewriteStateRewriteMonad$fApplicativeRewriteMonad$fFunctorRewriteMonad$fMonadRewriteMonad$fMonadFixRewriteMonadallR>->>-!->topdownR bottomupR!->>-!repeatRNormalizeState _normalized_specialisationCache_specialisationHistory_inlineHistory_primitiveArgs_recursiveComponentsTermClassification _function _primitive _selection NormRewriteNormalizeSessionNormalizeMonad inlineHistory normalized primitiveArgsrecursiveComponentsspecialisationCachespecialisationHistory$fShowTermClassification primitive selectionconstantPropagation normalizationbvToIntegerVerilogbvToIntegerVHDLindexToIntegerVerilogindexToIntegerVHDLsignedToIntegerVerilogsignedToIntegerVHDLunsignedToIntegerVerilogunsignedToIntegerVHDLfromIntegerTFvhdlunsignedsignedassign signedLiteralunsignedLiteral literalTFwordTFintTFkeywords isKeyword parseBasic parseBasic' parseExtendedtoBasic'toBasic isBasicCharunextend importedNames timeUnitsstripDollarPrefixeslookupFreshCache#updateFreshCache# mkUnique#add# addMultiple#addRaw#make# makeBasic# makeBasicOr#next#nextN#deepenN#deepen#suffix#prefix#toText#isBasic# isExtended#toPrintableAscii#parseIdentifier#make## toBasicId# fromCoreId#$fPrettyIdentifieremptyIdentifierSetunionmakeSetclearSettoList toLazyText unsafeMakeadd addMultipleaddRawmake makeBasic makeBasicOrmakeAsnextnextNdeependeepenNsuffixprefix fromCoreIdmkBlackBoxContextextractPrimWarnOrFailmkFunAppmkDeclarations'mkDeclarations mkNetDecl mkSelection mkProjectionmkDcApplicationmkExpr genComponent coreToType' bitsToBitsrenderTemplate ExpandError AttrErrorPortProductError InstancePortip_idip_typehmFindWithDefaultinstPort stripFiltered stripVoidflattenFiltered isVoidMaybeisVoidisFilteredVoid squashLetssplitNormalizedunsafeCoreTypeToHWTypeunsafeCoreTypeToHWTypeM'unsafeCoreTypeToHWTypeMcoreTypeToHWTypeM'coreTypeToHWTypeMunexpectedProjectionErrorMsgconvertToCustomReprmaybeConvertToCustomReprcoreTypeToHWType'coreTypeToHWTypeoriginalIndicesmkADThasUnconstrainedExistential isRecursiveTyrepresentableTypetypeSizeconSize termHWType termHWTypeM isBiSignalIn isBiSignalOutcontainsBiSignalInmkUniqueNormalized orNothing renameBinder evalBlackBoxmkUniqueArgumentsmkUniqueResult idToInPort idToOutPortidToPort id2identifier setRepNamemkUnique preserveStatepreserveVarEnv dcToLiteral extendPorts prefixParentmkAssignconvPrimitiveTypetoPrimitiveTypefromPrimitiveType mkTopInputportProductError mkVectorChain mkRTreeChaingenComponentName genTopNamestripAttributes mkTopOutput mkTopCompDeclmkTopUnWrappermkTopInstInputthrowAnnotatedSplitErrormkTopInstOutputnestMbindsExistentialsiteAlts withTicks affixNameexpandTopEntityOrErrMexpandTopEntityOrErrexpandTopEntity zoomExtrafindAccidentialShadowsapply applyDebug runRewriterunRewriteSession setChangedchangedclosestLetBinder mkDerivedName mkTmBinderFor mkBinderFor inlineBinders isJoinPointIn tailCalls isVoidWrappersubstituteBindersliftAndSubsituteBinders isFromIntinlineOrLiftBinders liftBinding mkFunction addGlobalBindcloneNameWithInScopeSetcloneNameWithBindingMapisUntranslatableisUntranslatableTypenormalizeTermTypes normalizeIdwhnfRW bindPureHeapremoveUnusedBinders xOptimizeseparateArguments etaExpandSynetaExpansionTL typeNatAdd typeNatMul typeNatSub vecHeadPrim vecLastPrim vecHeadTy vecTailPrim vecInitPrim vecTailTyextractHeadTail mkVecConsmkVecNil reduceReverse reduceZipWith reduceMap reduceImapreduceIterateIreduceTraverse mkTravVec reduceFoldr reduceFold reduceDFold reduceHead reduceTail reduceLast reduceInit reduceAppendreduceUnconcatreduceTransposereduceReplicatereduceReplace_intreduceIndex_int reduceDTFold reduceTFoldreduceTReplicate buildSNatcaseCasecaseConcaseElemNonReachablecaseFlatcaseLet caseOneAltelimExistentials inputHoleverifyBlackBoxContextextractLiteralssetSym selectNewNamerenderFilePathrenderBlackBox renderElem parseFailidToExprbbResultlineToIdentifier lineToType renderTagelementsToText elementToText exprToStringprettyBlackBox prettyElem walkElement usedVariablesgetUsedArguments onBlackBoxcheckUndefinedhashCompiledPrimMapgeneratePrimMap constantArgsgetFunctionPluralityConstantSpecInfocsrNewBindings csrNewTermcsrFoundConstant isConstantArg shouldReducealreadyInlined addNewInlineisNonRecursiveGlobalVarisRecursiveBndrconstantSpecInfocollectCallGraphUniques callGraphclassifyFunctionisCheapFunctionnormalizeTopLvlBndr substWithTyEqtvSubstWithTyEq rewriteExpr mkInlineTick$fShowConstantSpecInfotopSortreverseTopSortcallGraphBindingsappProp constantSpec specialize nonRepSpectypeSpec zeroWidthSpec argCastSpeccaseCast elimCastCastletCast splitCastWorkmakeANF nonRepANF reduceBinders reduceConstreduceNonRepPrimbindConstantVarinlineBndrsCleanup inlineCast inlineCleanupcollapseRHSNoops inlineNonRepinlineOrLiftNonRep inlineSimIO inlineSmallinlineWorkFreealtpllTF altpllQsysTF alteraPllTFalteraPllQsysTFalteraPllTemplatealtpllTemplatealtpllQsysTemplatealteraPllQsysTemplatedeadCoderemoveUnusedExpr flattenLet recToLetRec simpleCSEtopLetdisjointExpressionConsolidation $fEqCaseTree$fShowCaseTree$fFunctorCaseTree$fFoldableCaseTree topdownSucR innerMost applyManyCallTreeCLeafCBranchrunNormalization normalize normalize'checkNonRecursive cleanupGraph mkCallTree stripArgs flattenNodeflattenCallTreecallTreeToListwarnprepareBlackBox isLiteral mkArgument mkPrimitive collectMealy collectBindIO collectAppIOunSimIO mkFunInput genNetlistrunNetlistMonadgenNames genTopNames genComponentTreorderDefault reorderCustompatPos toSimpleVarcheckBBFUnexpectedModificationModifiedAddedRemovedManifest manifestHash successFlagsports topComponent fileNamesdomainstransitiveDependencies FilesManifest ManifestPortmpName mpTypeName mpDirectionmpWidth mpIsClockmpDomainInOutunsafeFromHexDigest toHexDigest parseFilesmkManifestPortmanifestFilename mkManifestpprintUnexpectedModificationpprintUnexpectedModificationsreadFreshManifestisUserModified readManifest writeManifestserializeManifest$fFromJSONPortDirection$fToJSONPortDirection$fFromJSONManifestPort$fToJSONManifestPort$fFromJSONFilesManifest$fFromJSONManifest$fToJSONManifest$fShowUnexpectedModification$fShowManifest$fReadManifest $fEqManifest$fShowManifestPort$fReadManifestPort$fEqManifestPort$fReadPortDirection VerilogStateRange ContiguousSplitincludeuselibs noEmptyInitcontinueWithRangeexprLitbitsbit_char encodingNote$fBackendVerilogState$fHasIdentifierSetVerilogState VHDLState$fBackendVHDLState$fHasIdentifierSetVHDLState BlockState_bsDeclarations_bsHigherOrderCalls _bsBackendBlackBoxHaskellOptsbo_ignoredArgumentsbo_supportedHdlsbo_multiResultblackBoxHaskell$fDefaultBlackBoxHaskellOpts$fHasIdentifierSetBlockState $fShowTExprLitHDLBSILowHighdeclarationReturn declarationunvecdeconstructProductuntuplebvLit boolToBit enableToBit boolFromBitboolFromBitVectorunsignedFromBitVector boolFromBitsvecconstructProducttuplegetStrgetBooltExprToInteger exprToIntegerclog2tySizeinstHOinstDeclviaAnnotatedSignaltInputstResults toIdentifierandExprnotExprpureToBVpureToBVResizedopen$fIsStringLitHDL $fNumLitHDL $fShowLitHDLFCall iterateBBF iterateTF iterateTF'foldFunctionPluralityfoldBBFfoldTFfoldTF'indexIntVerilogindexIntVerilogTFindexIntVerilogTemplate splitTopAnnsplitTopEntityT removeForAllselectTopEntitiesgetClashModificationDatehdlFromBackend replaceCharremoveHistoryFileprefixModuleName generateHDLloadImportAndInterpretknownBlackBoxFunctionsknownTemplateFunctionscompilePrimitiveprocessHintError createHDLwriteVerilatorShimpprVerilatorShim writeEdam createEDAM asEdamFile prepareDir writeAndHashwriteHDLwriteMemoryDataFiles copyDataFilesnormalizeEntitysortTopSystemVerilogState$fBackendSystemVerilogState$$fHasIdentifierSetSystemVerilogStateghc-prim GHC.TypesTruebase Debug.Tracetrace traceMarkerIO traceMarker traceEventIO traceEvent traceStack traceShowMtraceM traceShowId traceShowtraceId putTraceMsgtraceIO GHC.ClassesEq GHC.MaybeNothing mapAccumLM iterateNMGHC.Listiterate<:> indexMaybeall2 Data.FoldableallFalsecountEqzipEqualGHC.Base++filterzipelemminimummaximumfoldr1productsumfoldl1lengthfoldl'foldlfoldrnull Data.OldListdeleteisSubsequenceOfData.Traversable mapAccumRfindnotElem minimumBy maximumByanyorand concatMapconcatunwordswordsunlineslinesunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupBygroupdeleteFirstsByunzip7unzip6unzip5unzip4zipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4genericReplicate genericIndexgenericSplitAt genericDrop genericTake genericLengthinsertByinsert partition transpose intercalate intersperse intersectBy intersectunionBy\\deleteBynubBynub isInfixOf isSuffixOf isPrefixOf findIndices findIndex elemIndices elemIndex stripPrefix dropWhileEndunzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiterate'scanr1scanrscanl'scanl1scanlfoldl1'initlasttailunconsheadextra-1.7.10-335fc383301871b17a098e95a5c6f97c618958e95bb6b44607375b72bb31cdb7Control.Monad.ExtraorMallManyM partitionMcomparingLength compareLengthzipWithLongestnubOrdBynubOrdOnnubOrd nubSortBy nubSortOnnubSortchunksOf stripInfixEnd stripInfix stripSuffix dropSuffix dropPrefix dropWhileEnd'splitsplitOn breakOnEndbreakOn mconcatMapdropEnd1drop1 firstJustlinesBywordsByspanEndbreakEndreplacemergeBymerge productOn'product'sumOn'sum' groupSortBy groupSortOn groupSort minimumOn maximumOnnubOngroupOn unescapeJSON escapeJSON unescapeHTML escapeHTMLline1word1upperlowertrimtrimEnd trimStart takeWhileEnd concatUnzip3 concatUnzip zipWithFromzipFrom splitAtEnddropEndtakeEnd enumeratesnocconsunsnoclistnotNull!?lastDefheadDefallSameanySame disjointOrdBy disjointOrddisjoint repeatedly splitAtList equalLengthOLSettoListLshowtshowtlversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameordered-containers-0.2.2-e49d50ba95994c75bfa1446d08a757441e37fe0755b60253c02c154d3fea8257Data.Map.Ordered.InternalOMapLineMaptoSpecNewlines genLineErr genLineErr'Intlens-5.1-a7f0f89aa462ff78bceb0ca93b1d5f73f413249d773290bac7b6c95a3d76dc05Control.Lens.TypeFold zipTvSubstsubstTyVarBndr substTyVar Data.EitherLeftRightGHC.ErrJustclash-prelude-1.6.3-inplaceClash.XExceptionerrorXpure<*>fmaphashable-1.4.0.2-07711fc1a94fc30abe5894d0411b0c1d9fb8dae55b26a0516bf7c97ba52b735dData.Hashable.ClasshashinlineNonRepWorkerbytestring-0.10.10.0Data.ByteString.Internal ByteStringVerilogMdata-default-class-0.1.2.0-8813450a1d67ed5e1b5991a02d5957c7c4a59352b38b8426235fd569573449c0Data.Default.ClassdefGHC.NumNum Data.StringIsStringSystemVerilogM