clash-prelude: Clash: a functional hardware description language - Prelude library

[ bsd2, hardware, library ] [ Propose Tags ] [ Report a vulnerability ]

Clash is a functional hardware description language that borrows both its syntax and semantics from the functional programming language Haskell. The Clash compiler transforms these high-level descriptions to low-level synthesizable VHDL, Verilog, or SystemVerilog.

Features of Clash:

  • Strongly typed, but with a very high degree of type inference, enabling both safe and fast prototyping using concise descriptions.

  • Interactive REPL: load your designs in an interpreter and easily test all your component without needing to setup a test bench.

  • Higher-order functions, with type inference, result in designs that are fully parametric by default.

  • Synchronous sequential circuit design based on streams of values, called Signals, lead to natural descriptions of feedback loops.

  • Support for multiple clock domains, with type safe clock domain crossing.

This package provides:

  • Prelude library containing datatypes and functions for circuit design

To use the library:

A preliminary version of a tutorial can be found at https://docs.clash-lang.org/tutorial, for a general overview of the library you should however check out Clash.Prelude. Some circuit examples can be found in Clash.Examples.


[Skip to Readme]

Modules

[Index] [Quick Jump]

Flags

Manual Flags

NameDescriptionDefault
large-tuples

Generate instances for classes such as NFDataX and BitPack for tuples up to and including 62 elements - the GHC imposed maximum. Note that this greatly increases compile times for `clash-prelude`.

Disabled
super-strict

Use deepseqX (instead of seqX) in register-like constructs. This can help to eliminate space leaks when using lazy data structures in registers-like constructs. This potentially slows down Clash hardware simulation.

Disabled
strict-mapsignal

Use seqX in mapSignal#. This can help to eliminate space leaks in long running simulations.

Disabled
doctests

You can disable testing with doctests using `-f-doctests`.

Enabled
unittests

You can disable testing with unittests using `-f-unittests`.

Enabled
benchmarks

You can disable testing with benchmarks using `-f-benchmarks`.

Enabled
workaround-ghc-mmap-crash

Only use this flag when hit by GHC bug #19421. See clash-compiler PR #2444.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Versions [RSS] 0.2, 0.3, 0.4, 0.5, 0.5.0.1, 0.5.1, 0.6, 0.6.0.1, 0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.8, 0.8.1, 0.9, 0.9.1, 0.9.2, 0.9.3, 0.10, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.5, 0.10.6, 0.10.7, 0.10.8, 0.10.9, 0.10.10, 0.10.11, 0.10.13, 0.10.14, 0.11, 0.11.1, 0.11.2, 0.99, 0.99.1, 0.99.2, 0.99.3, 1.0.0, 1.0.1, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.6.0, 1.6.1, 1.6.2, 1.6.3, 1.6.4, 1.6.5, 1.6.6, 1.8.0, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.10.0 (info)
Change log CHANGELOG.md
Dependencies adjunctions (>=4.0 && <5.0), array (>=0.5.1.0 && <0.6), arrows (>=0.4 && <0.5), base (>=4.18 && <5), binary (>=0.8.5 && <0.11), bytestring (>=0.10.8 && <0.13), constraints (>=0.9 && <1.0), containers (>=0.4.0 && <0.9), data-binary-ieee754 (>=0.4.4 && <0.6), data-default (>=0.7 && <0.9), deepseq (>=1.4.1.0 && <1.6), distributive (>=0.1 && <1.0), extra (>=1.6.17 && <1.9), ghc-bignum (>=1.0 && <1.4), ghc-prim (>=0.5.1.0 && <0.14), ghc-typelits-extra (>=0.5.3 && <0.6), ghc-typelits-knownnat (>=0.8.3 && <0.9), ghc-typelits-natnormalise (>=0.9.5 && <0.10), half (>=0.2.2.3 && <1.0), hashable (>=1.2.1.0 && <1.6), infinite-list (>=0.1 && <0.2), lens (>=4.10 && <5.4), mtl (>=2.0 && <3.0), QuickCheck (>=2.7 && <2.19), recursion-schemes (>=5.1 && <5.3), reflection (>=2 && <2.2), singletons (>=2.0 && <3.1), string-interpolate (>=0.3 && <0.4), tagged (>=0.8 && <0.9), template-haskell (>=2.20.0.0 && <2.24), text (>=0.11.3.1 && <2.2), th-abstraction (>=0.3.0 && <0.8.0), th-lift (>=0.7.0 && <0.9), th-orphans (>=0.13.1 && <1.0), time (>=1.8 && <1.15), transformers (>=0.5.2.0 && <0.7), type-errors (>=0.2.0.0 && <0.3), uniplate (>=1.6.12 && <1.7), vector (>=0.11 && <1.0) [details]
Tested with ghc ==9.6.7, ghc ==9.8.4, ghc ==9.10.3, ghc ==9.12.4
License BSD-2-Clause
Copyright Copyright © 2013-2016, University of Twente, 2016-2017, Myrtle Software Ltd, 2017-2019, QBayLogic B.V., Google Inc., 2021-2026, QBayLogic B.V.
Author The Clash Authors
Maintainer QBayLogic B.V. <devops@qbaylogic.com>
Uploaded by QBayLogic at 2026-04-23T16:33:16Z
Revised Revision 1 made by QBayLogic at 2026-05-10T11:48:04Z
Category Hardware
Home page https://clash-lang.org/
Bug tracker https://github.com/clash-lang/clash-compiler/issues
Source repo head: git clone https://github.com/clash-lang/clash-compiler.git(clash-prelude)
Distributions Arch:1.8.2, LTSHaskell:1.8.4
Reverse Dependencies 21 direct, 2 indirect [details]
Downloads 52530 total (335 in the last 30 days)
Rating 2.5 (votes: 3) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for clash-prelude-1.10.0

[back to package description]

Clash - A functional hardware description language

Pipeline status Hackage

Clash is a functional hardware description language that borrows both its syntax and semantics from the functional programming language Haskell. The Clash compiler transforms these high-level descriptions to low-level synthesizable VHDL, Verilog, or SystemVerilog.

Features of Clash:

  • Strongly typed, yet with a very high degree of type inference, enabling both safe and fast prototyping using concise descriptions.

  • Interactive REPL: load your designs in an interpreter and easily test all your component without needing to setup a test bench.

  • Higher-order functions, with type inference, result in designs that are fully parametric by default.

  • Synchronous sequential circuit design based on streams of values, called Signals, lead to natural descriptions of feedback loops.

  • Support for multiple clock domains, with type safe clock domain crossing.

Open-source community

Clash benefits from an active community. Whether you need a question answered or want to contribute to open-source features, browse the features below to make the most of Clash.