Releases: clash-lang/clash-compiler
Release list
v1.10.0
Release highlight:
Clash.Class.NumConvert: Utilities for safely converting between various Clash number types #2915
Added:
-
Added GHC 9.12 support
-
Clash.Class.NumConvert: Utilities for safely converting between various Clash number types #2915 -
Add
Clash.XException.ShowXinstance forForeign.C.Types.CUShort. #2397 -
Introduced various new types to
Clash.Signalto more easily represent time and its relation to your clock domain. New types:Seconds,Milliseconds,Microseconds,Nanoseconds,Picoseconds,DomainToHz,HzToPeriod,PeriodToHz,PeriodToCycles,ClockDivider. #2734 -
DistributiveandRepresentableinstances forVec -
Resize functions
maybeResizeandmaybeTruncateBtoClash.Class.Resize. Can be used to resize without loss of information. #2779 -
Alongside the existing Eq-like and Ord-like signal operators like
.==.and.<=.etc., there are now new functions for comparing with constants:.==,==.,./=,/=.,.<=,<=.,.>=,>=.,.>,>.,.<,<.,.&&,&&.,.||,||.. These are useful for comparing signals with constants in a more readable way. For example,a .==. pure Truecan now be replaced witha .== True. #2545 -
instance
HasField f (Signal dom r) (Signal dom a). This means record dot accesses will be passed to the underlying type. For example, this will work:data MyRecord = MyRecord { myField :: Int } a :: Signal dom MyRecord a = pure (MyRecord 3) b :: Signal dom Int b = a.myField
-
BitPackinstance forData.Proxy.Proxy -
apEn, which is amuxthat optionally applies an update function to a value. #3029 -
regEnN, which is a chain ofregEns. #3029 -
Index 0instances forBitPack,Bits,Counter,FiniteBits,Parity, andSaturatingNum. #2784 -
Zero-sized block RAM implementations for
blockRam1andblockRamU. #2784 -
Counter a => Counter (Vec 0 a)instance. #2784 -
SaturatingNumandBoundedinstances forSignal dom a. Thesatfamily (satAdd,satSucc, ...) can now be used onSignals and{min,max}Boundcan be used to construct them #2931 -
-fclash-no-concurrent-topentity-compilationflag to disable concurrent compilation of top entities. This is mostly useful to get a consistent debug output. -
SomeBoundedSNatand Hedgehog generators #3183 -
Eq,NFData,ShowXandBitPackinstances forRamOp. -
smapWithBoundsextendingsmapvia offering a proof witness for the upper bound of the vector size to the mapping function. #2686 -
The function
Clash.Explicit.DDR.ddrForwardClock, which uses a DDR output primitive to forward a clock signal to a DDR-capable output pin. #2876
Removed:
- Support for GHC versions 9.4 and older
- Newer Verilators (> v5) can deal with delay statements, hence removing the need for Clash specific workarounds. If you relied on Clash-generated Verilator shims, consider using
verilator --build --binaryinstead. - Experimental feature "multiple hidden domains" #2750
- The deprecated module
Clash.Prelude.DataFlowwas removed. Theclash-protocolspackage provides dataflow-based protocols and circuits. #3181 - The deprecated functions
altpllandalteraPllwere removed from theClash.Intel.ClockGenmodule. Clash 1.8 introduced the new functionsaltpllSync,alteraPllSync,unsafeAltpllandunsafeAlteraPll. A name for the IP instantiation, handled by the name argument toaltpllandalteraPll, can be provided with theClash.Magic.setNamefunction. #3181
Changed:
-
dfoldnow offers a proof witness for the upper bound of the vector size to the folding function. Note that this change may require additional type annotations, as solutions working in the past may complain with an untouchable type error now. #2686 -
You can now only create an
SDomainConfigurationwhen theperiodof the domain is at least1. Pattern matching on anSDomainConfigurationbring the1 <= periodinto scope. This in turns enables the following code to typecheck:import Clash.Prelude import Data.Proxy f :: forall dom . KnownDomain dom => Proxy dom -> SNat (PeriodToCycles dom (Milliseconds 1)) f Proxy = case knownDomain @dom of SDomainConfiguration {} -> SNatwhere the
DivRUintype PeriodToCycles (dom :: Domain) (period :: Nat) = period `DivRU` DomainPeriod domrequires that the
DomainPeriod domis at least1. #2740 -
selectandselectInow use<=constraints instead ofCmpNat. #2873 -
ResetStrategynow contains the reset function, to avoid dummy arguments onNoClearOnReset#2849 -
Clash.Explicit.DDR,Clash.Intel.DDRandClash.Xilinx.DDR: #2833- The constraints for the functions have been rewritten to use
DomainPeriod, which makes them more readable and relaxes unnecessary constraints on the virtual DDR domain. The type-level variables for the domains have been renamed.domis a real domain,domDDRis the virtual DDR domain. - The Xilinx and Intel primitives only support domains where the rising edge is the active edge. This is now enforced at the type level by adding a constraint.
- The Xilinx and Intel primitives now directly support any data type that has a
BitPackinstance.
- The constraints for the functions have been rewritten to use
-
Order of type arguments for functions in
clash-prelude-hedgehognow follows size, domain, monad. #2880 -
The Clash Prelude now exports the
Defaultclass from the packagedata-defaultinstead of from the now supersededdata-default-class. If you import theDefaultclass name or thedeffunction from thedata-default-classpackage older than version 0.2, or one of your dependencies does, you might get a bewildering error message. You might get the error "No instance for (Default T)" even though there appears to be such an instance. The best solution is to make sure all your packages and dependencies use thedata-defaultpackage and not thedata-default-classpackage. The next most obvious solution is to make suredata-default-classis of version 0.2 or higher, for instance by depending on it in your own package. If this creates a dependency conflict, another solution is to import the correct module.DefaultanddeffromClash.PreludeorData.Defaultare for the newdata-defaultpackage.Data.Default.Classis for thedata-default-classpackage. There are situations where this will still not be enough, but luckily theDefaultclass is not used all that much. #2891 -
Changed implementation of
(+>>)to no longer requireKnownNat -
The
clash-preludepackage now usesPolyKindsby default, meaning all its type class instances are now more general than before. As an example, withoutPolyKinds,BitPack (Proxy a)would only be defined whena :: Type, with the extension it would be defined for anya :: k. After this change, some instances in user code might now overlap. #2994 -
When generating (System)Verilog, Clash now resets the default net type from none to the verilog default after the generated module. #3005
-
The content from the
Clash.Tutorialmodule and from https://clash-lang.readthedocs.io/ has been split and moved to two new locations.- The actual tutorial parts has been moved to: https://docs.clash-lang.org/tutorial/
- Parts that fit better in the clash compiler user guide have been moved to: https://docs.clash-lang.org/compiler-user-guide/
Moving the documentation to these locations makes it easier to update their content as it is no longer needed to release a new version of the
clash-preludepackage for the publication of this content. -
Vector functions in Verilog now have indices consistent with the Vec inputs/outputs (before they were reversed). This is convenient when writing design constraints, which can now be referenced consistently like
imap[0],imap[1],... See #3088.
Fixed:
- Clash no longer gives
Dubious primitive instantiation warningwhen usingunpack#2386. - Clash now generates more intuitive names for specialized binders. See #2508.
foldlonVecis now strict. See [this GitHub discussion](https://github.com/hasura/graphql-engine/pu...
v1.8.5
Added:
Clash.Annotation.SynthesisAtrributes.annotateReg, a function to add synthesis attributes (e.g.ASYNC_REG) to register declarations in the HDL generated by the Clash compiler.
#3093registerSyncReset#3115
Fixed:
- The
Clash.Explicit.Verification.checkblackbox now correctly uses the given clock line, not assuming any longer that it is already bound to an identifier in the first place. #2907 - The type of string literals passed to the
Clash.Explicit.Verification.checkblackbox now matches with the input provided viaClash.Explicit.Verification.name. #2908 toInteger,toEnum, andfromEnumnow correctly sign extend when using Verilog backend. #2729dumpVCDnow properly aligns the first clock edges in multi-domain designs. #3075- Removed the limit on the number of traces in
dumpVCD. Also removed unnecessary double newlines after 1-bit signals. #3082 - In Clash simulation,
packforVecandRTreehad all bits undefined when the spine of the value had anXException. Now, those elements with defined bits will output those defined bits. In HDL, this was already the case. Example: considerxs = 1 :> undefined :> Nil :: Vec 2 (Unsigned 4)andys = 1 :> undefined :: Vec 2 (Unsigned 4).xsmerely has an undefined element, butyshas an undefined spine: it is a:>constructor that is undefined.pack ysused to be0b...._....but is now0b0001_...., just aspack xsalready was.
#3114 - Clash drops cached normalization result. #3109
- Fix
holdResetglitch behavior for asynchronous resets and wrong hold cycles for sync resets. #3115 - Do not emit source locations if
-gis not passed to clash. #3132 clash-ghc: RemoveOpt_LlvmTBAAfrom unwanted flags. #2508
v1.8.4
Changed:
Fixed:
collapseRHSNoopsnow runs after constant folding, making Clash able to constant fold more expressions than before. See #3036.- The
unzipfamily no longer retains a reference to the original input for every (unevaluated) part of the output tuple. Similarly,mapAccumLandmapAccumRare now also more eager to drop references. This can help to prevent space leaks. See #3038. - Individual items of
iterateIno longer retain a reference to the whole list, preventing space leaks. See #3042. - The compiler now tracks assignment types in more places, which can prevent "clash error call" errors in some specific cases. See #3045.
- Test bench primitives now assign the string they want to pass to Verilog's
$displayto a variable before printing. This works around a limitation in IVerilog. See #3046.
v1.8.3
Added:
Counterinstances forBool,Bit,Int,Int8,Int16,Int32,Int64,Word,Word8,Word16,Word32,Word64,IdentityandMaybe. #2692- The Vec type now has a COMPLETE pragma to avoid incomplete pattern matches when using the
(:>)pattern. #3020 - RamOp now has an AutoReg instance. #2792
- Added instance
NFDataX (SimOnly a)#2900 - Support for GHC 9.10 on Windows (macOS and Linux were already supported) #2945
- Added a
BitPackinstance forChar#2957 - Support for GHC 9.10.2 #3003
Changed:
- Functions defined on
Clash.Class.Counterare now public #2692
Fixed:
- Clash hanging when rendering
Index nliterals, for large values ofn#2813 - Render overflowed Index literals as don't-cares in HDL #2970
- Clash errors out when
Clash.Sized.Vector.splitAtis compile-time evaluated in an illegal context [#2831]#2831 Clash.Explicit.DDR: #2911ddrIn: VHDL: Remove data input from sensitivity list ofddrIn_neg_latchregister as it is superfluous. This should not affect functionality.ddrOut: VHDL: Fix incorrect usage ofEnableinput when the domain is set to asynchronous resets. Deasserting theEnableexhibited wrong behavior before this fix.
Clash.Xilinx.DDR: #2911- These primitives only support clocks where the rising edge is the active edge. Using them in a domain with falling active edges now causes an error.
oddr: Fix VHDL and SystemVerilog erroring out during HDL generation- Symbols in HDL for both
iddrandoddrwere renamed to match their function.
Clash.Intel.DDR: #2911- These primitives only support clocks where the rising edge is the active edge. Using them in a domain with falling active edges now causes an error.
- Fix rendering HDL. It variously errored out or generated non-working HDL.
- Rendering HDL no longer causes Clash to issue a warning about an argument unused in Haskell but used in the primitive black box.
makeTopEntitynow accounts forSimOnlyconstructs. This can prevent warnings in situtations where theSimOnlytype would contain typesmakeTopEntitycannot handle. #2897- Clash did not build on GHC 9.6.7 (but did on 9.6.6) #2916
- Ignore
Ticks inTermLiteral Integer,TermLiteral Char,TermLiteral Natural, andTermLiteral (SNat n)#2925 - Fixed laziness issue in internal black box
imap_go#2542 - Clash's evaluator now uses
TemplateHaskellnames to detect renamed symbols inGHC.*andClash.*. Fixes errors similar toNo blackbox found for: GHC.Internal.Base.eqString#2972 - No blackbox found for:
GHC.Internal.Control.Exception.Base.recSelErroron GHC 9.10 #2966 - Verilog and System Verilog code gen bug for
map head#2809 - Error parsing blackbox:
Clash.Sized.Vector.head#2988 - Clash no longer duplicates included datafiles when component is instantiated multiple times #3008
- Clash will no longer emit "no blackbox found for"
GHC.Real's exponentiation function if it is applied to constants #3010 - Clash will no longer error out when converting
ensureSpineon Clash number types to HDL #3021 - Clash will no longer ignore Synthesize annotations when the function is used in an argument position #3024
v1.8.2
Added:
- Support for GHC 9.10 #2758
- Support for GHC 9.8.4 #2852
- Add
ShowX,NFDataXinstances forProxy#2637 - Added
Clash.Sized.Vector.ToTuple.vecToTuple: a way to safely work around incomplete patterns warnings on patterns involvingVectors. #2862 - Added operator precedences for infix usage of functions exported from
Clash.Class.Num:mul,add,sub,satMul,satAdd,satSub,boundedMul,boundedAdd, andboundedSub. This means that expressions such asa `add` b `mul` cnow get parsed asa `add` (b `mul` c)instead of(a `add` b) `mul` c. #2719
Changed:
BitVector nnow has an implementation forensureSpinewhich ensures the constructor is present. #2702xToBVis now located inClash.Sized.Internal.BitVectorto avoid circular dependencies. #2702- The error messages that mention the valid ranges for out-of-range inputs have been improved to be more intuitive: one of
<empty range>,[n]or[n..m]. All n..m ranges are now ordered with the lower bound on the left. #2733
Fixed:
- cabal: Make
workaround-ghc-mmap-crasha noop on non-x86_64. Fixes #2656 - Clash no longer hides error messages if it fails to load external (precompiled) modules. Note: this fix only works from GHC 9.0 on. See #2365
- HDL generation fails when using multiple-hidden feature in combination with synthesis attributes #2593
- Clash no longer errors out in the netlist generation stage when a polymorphic function is applied to type X in one alternative of a case-statement and applied to a newtype wrapper of type X in a different alternative. See #2828
- various issues with black boxes and evaluator rules for number-related primitives #2689
genBitVectorno longer contains off-by-one error on for generated Naturals #2704- (+>>.) and (.<<+) such that they are compliant with (+>>) and (<<+) for vectors of zero length in the sense that the input vector is kept unchanged. #2730
- Removed
stringsearchdependency fromv16-upgrade-primitives. See #2726 - Bug in the compile-time evaluator #2781
- Exponentiation (
Clash.Class.Exp) is now right-associative with a precedence level of 8 (infixr 8). By accident, it used to lack a fixity declaration, meaning it was implicitly left-associative at level 9. #2818 - Unused argument warnings on writeToBiSignal# #2822
- Clash errored saying it cannot translate a globally recursive function in code that originally only contains let-bound (local) recursion #2839
- Clash generates illegal Verilog names #2845
v1.8.1
- Bump package dependencies to allow inclusion in stackage-nightly
- Bump package dependencies to allow building on GHC 9.8.1
v1.8.0
Release highlights:
- Support for GHC 9.2, 9.4, 9.6 and 9.8. While GHC 9.2 is supported, we recommend users to skip this version as there is a severe degradation of error message quality. With this change, Clash now supports GHC versions 8.6 through 9.8.
- Major overhaul of the clocking functionality in
Clash.Xilinx.ClockGenandClash.Intel.ClockGen, see their respective entries below mealySfunction (and several variations) to make writing state machines using the strictStatemonad easier- Overhaul of
resetGlitchFilter, see its respective entries below.
Added:
altpllSyncandalteraPllSyncinClash.Intel.ClockGen. These replace the deprecated functions without theSyncsuffix. Unlike the old functions, these functions are safe to use and have a reset signal for each output domain that can be used to keep the domain in reset while the clock output stabilizes. All PLL functions now also support multiple clock outputs like the oldalteraPlldid. #2592- A new clock type
DiffClockis introduced to signify a differential clock signal that is passed to the design on two ports in antiphase. This is used by the differential Xilinx clock wizards inClash.Xilinx.ClockGen. #2592 Clash.Explicit.Testbench.clockToDiffClock, to create a differential clock signal in a test bench. It is not suitable for synthesizing a differential output in hardware. #2592resetGlitchFilterWithReset, which accomplishes the same task asresetGlitchFilterin domains with unknown initial values by adding a power-on reset input to reset the glitch filter itself. #2544- Convenience functions:
noReset,andReset,orResetplus their unsafe counterparts #2539 - Convenience constraint aliases:
HasSynchronousReset,HasAsynchronousReset, andHasDefinedInitialValues#2539 Clash.Prelude.Mealy.mealySandClash.Explicit.Mealy.mealySand their bundled equivalentsmealySBwhich make writing state machines using the strictStatemonad easier. The tutorial has also been simplified by using this change. #2484- An experimental feature allowing clocks to vary their periods over time, called "dynamic clocks". Given that this is an experimental feature, it is not part of the public API. #2295
- The prelude now exports
+>>.and.<<+, which can be used to shift in a bit into aBitVectorfrom the left or right respectively - similar to+>>and<<+forVecs. #2307 Clash.DataFiles.tclConnectorand the executablestatic-filesinclash-lib. They provide the Tcl Connector, a Tcl script that allows Vivado to interact with the metadata generated by Clash (Quartus support will be added later). SeeClash.DataFiles.tclConnectorfor further information. More documentation about the Tcl Connector and the Clash<->Tcl API will be made available later. #2335- Add
BitPack,NFDataXandShowXinstances forOrdering#2366 - Verilog users can now influence the "precision" part of the generated
timescalepragma using-fclash-timescale-precision. #2353 - Clash now includes blackboxes for
integerToFloat#,integerToDouble##2342 - Instances
Arbitrary (Erroring a),Arbitrary (Saturating a),Arbitrary (Saturating a), andArbitrary (Zeroing a)#2356 Clash.Magic.clashSimulation, a way to differentiate between Clash simulation and generating HDL. #2473Clash.Magic.clashCompileError: make HDL generation error out with a custom error message. Simulation in Clash will also error when the function is evaluated, including a call stack. HDL generation unfortunately does not include a call stack. #2399- Added
Clash.XException.MaybeX, a data structure with smart constructors that can help programmers deal withXExceptionvalues in their blackbox model implementations #2442 Clash.Magic.SimOnly, A container for data you only want to have around during simulation and is ignored during synthesis. Useful for carrying around things such as: a map of simulation/vcd traces, co-simulation state or meta-data, etc. #2464KnownNat (DomainPeriod dom)as an implied constraint toKnownDomain dom. This reduces the amount of code needed to write - for example - clock speed dependent code. #2541Clash.Annotations.SynthesisAttributes.annotate: a term level way of annotating signals with synthesis attributes #2547Clash.Annotations.SynthesisAttributes.markDebug: a way of marking a signals "debug", instructing synthesizers to leave the signal alone and offer debug features #2547- Add hex and octal BitVector parsing. #1772
1 <= n => Foldable1 (Vec n)instance (base-4.18+only) #2563- You can now use
~PERIOD,~ISSYNC,~ISINITDEFINEDand~ACTIVEEDGEon arguments of typeClock,Reset,Enable,ClockNandDiffClock. #2590
Removed:
- Deprecated module
Clash.Prelude.BitIndex: functions have been moved toClash.Class.BitPack#2555 - Deprecated module
Clash.Prelude.BitReduction: functions have been moved toClash.Class.BitPack#2555 - Deprecated function
Clash.Explicit.Signal.enable: function has been renamed toandEnable#2555 - The module
Clash.Clocks.Derivinghas been removed. #2592
Deprecated:
unsafeFromLowPolarity,unsafeFromHighPolarity,unsafeToLowPolarity,unsafeToHighPolarityhave been replaced byunsafeFromActiveLow,unsafeFromActiveHigh,unsafeToActiveLow,unsafeToActiveHigh. While former ones will continue to exist, a deprecation warning has been added pointing to the latter ones. #2540- The functions
altpllandalteraPllinClash.Intel.ClockGenhave been deprecated because they are unsafe to use while this is not apparent from the name. Thelockedoutput signal of these functions is an asynchronous signal which needs to be synchronized before it can be used (something the examples did in fact demonstrate). For the common use case, new functions are available, namedaltpllSyncandalteraPllSync. These functions are safe. For advanced use cases, the old functionality can be obtained throughunsafeAltpllandunsafeAlteraPll. #2592
Changed:
- The wizards in
Clash.Xilinx.ClockGenhave been completely overhauled. The original functions were unsafe and broken in several ways. See the documentation inClash.Xilinx.ClockGenfor how to use the new functions. Significant changes are:clockWizardandclockWizardDifferentialnow output aClockand aResetwhich can be directly used by logic. Previously, it outputted a clock and an asynchronouslockedsignal which first needed to be synchronized before it could be used (hence the old function being unsafe). Additionally, the originallockedsignal was strange: it mistakenly was anEnableinstead of aSignal dom Booland there was a polarity mismatch between Clash simulation and HDL. Thelockedsignal was also not resampled to the output domain in Clash simulation.- There are new functions
unsafeClockWizardandunsafeClockWizardDifferentialfor advanced use cases which directly expose thelockedoutput of the wizard. - All clock generators now have the option to output multiple clocks from a single instance.
clockWizardDifferentialnow gets its input clock as aDiffClocktype; useclockToDiffClockto generate this in your test bench if needed. Previously, the function received two clock inputs, but this generatedcreate_clockstatements in the top-level SDC file for both phases which is incorrect.- A constraint was removed: The output clock domain no longer requires asynchronous resets. This was originally intended to signal that the outgoing lock signal is an asynchronous signal. The constraint does not convey this information at all and is wrong; it also prevents using synchronous resets in the circuit as recommended by Xilinx. Note that if you use the
unsafefunctions, it is still necessary to synchronize thelockedoutput in your design. - The port names of the primitives in HDL are now correctly lower case.
- Add Tcl generation. This moves the responsibility of MMCM component generation from the user to
clashConnector.tcl, which can be found in [clash-lib:Clash.DataFiles](https://hackage.haskell.org/package/clash-lib-1.8.0/docs/Cl...
v1.6.6
-
Support Aeson 2.2 #2578
-
Drop the snap package #2439
The Clash snap package has not been a recommended way to use Clash for quite some time, and it is a hassle to support.
In order to build a snap package, we build .deb packages for Clash with Ubuntu 20.04 LTS. But the interaction between the Debian build system and GHC is problematic, requiring significant effort to support and to upgrade to a more recent Ubuntu release.
Additionally, snap packages have their own issues on distributions other than Ubuntu. Given that we no longer recommend people use our snap package and given the effort required to keep supporting them, we have decided to drop the snap package.
v1.6.5
Fixed:
- Support building with all combinations of specific versions of our dependencies
hashableandprimitive. #2485 - The Haskell simulation of the PLL lock signal in
Clash.Clocks(used byClash.Intel.ClockGen) is fixed: the signal is now unasserted for the time the reset input is asserted and vice versa, and no longer crashes the simulation. HDL generation is unchanged. The PLL functions now have an additional constraint:KnownDomain pllLock. #2420
Changed:
- Export the constructor for the
Wrappingtype in theClash.Num.Wrappingmodule. See #2292
v1.6.4
Fixed:
- Input validation of the used arguments in blackboxes is now complete. #2184
Clash.Annotations.BitRepresentation.Deriving.deriveAnnotationno longer has quadratic complexity in the size of the constructors and fields. #2209- Fully resolve type synonyms when deriving bit representations. #2209
- Disregard ticks when determining whether terms are shared. Fixes #2233.
- The blackbox parser will make sure it fully parses its input, and report an error when it can't. #2237
- Wrap ~ARG[n] in parentheses. Fixes #2213
- The VHDL shift primitives no longer generate bound check failures. Fixes #2215
- Evaluator fails impredicative type instantiation of error values #2272
- Fix out of bound errors in toEnum/fromSLV for sum types #2220
- Netlist generation fails for certain uses of GADTs #2289
- The documentation for
ANN TestBenchhad it backwards; it now correctly indicates the annotation is on the test bench, not the device under test. #1750
Fixes with minor changes:
reduceXornow produces a result if the argument has undefined bits instead of throwing anXException(the result is an undefined bit).reduceAndandreduceOralready always produced a result. #2244
Added:
- Support for symbols in types while deriving bit representations. #2209
- Support for promoted data types while deriving bit representations. #2209
scanlParandscanrParin Clash's Prelude, as well as theRTreeversionstscanlandtscanr. These variants ofscanl1andscanr1compile to a binary tree of operations, with a depth ofO(log(n))(nbeing the length of the vector) rather than a depth ofnforscanl1andscanr1. #2177- The GADT constructors for
RTree(RLeafandRBranch) are now exported directly in addition to the patternsLRandBR. #2177 - Added the
~ISSCALARtemplate which can be used to check if an argument is rendered to a scalar in HDL. #2184 - Added support for records and infix constructors when using
Clash.Annotations.BitRepresentation.Deriving.deriveAnnotation. #2191 - Clash now contains instances for
ShowX,NFDataXandBitPackon the newtypes from the Data.Functor modules (Identity,Const,Compose,ProductandSum). #2218