circus: Types and a small DSL for working with netlistsvg

[ bsd3, hardware, library ] [ Propose Tags ]

Please see the README on GitHub at https://github.com/isovector/circus#readme


[Skip to Readme]
Versions [RSS] [faq] 0.1.0.0
Change log ChangeLog.md
Dependencies aeson (>=1.0.0.0), base (>=4.10 && <5), bytestring, containers, mtl, syb, text [details]
License BSD-3-Clause
Copyright Sandy Maguire
Author Sandy Maguire
Maintainer sandy@sandymaguire.me
Category Hardware
Home page https://github.com/isovector/circus#readme
Bug tracker https://github.com/isovector/circus/issues
Source repo head: git clone https://github.com/isovector/circus
Uploaded by isovector at 2021-07-16T20:01:23Z
Distributions NixOS:0.1.0.0
Downloads 54 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2021-07-16 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates


Readme for circus-0.1.0.0

[back to package description]

circus

Build Status

Dedication

Like it? Well I don't see why I oughtn't to like it. Does a boy get a chance to whitewash a fence every day?"

--Tom Sawyer, 'The Adventures Of Tom Sawyer'

Overview

This package contains types and a little DSL for producing JSON worthy of netlistsvg --- a fantastic program for drawing circuit diagrams.

Usage

While the Circus.Types module contains the bare-metal types that serialize in the expected format, it's not a joyful experience to use for yourself. Instead, mkCell is a smart constructor that will do what you want.

The most interesting types are Cells, which correspond to electrical components, and Modules, which are circuits themselves. The oddly named Bit represents an electrical node (a wire), and two components are connected by making them share a Bit.

Of course, Modules form a monoid, so they're easy to put together.

But what makes them easier to put together is the Circus.DSL module, which provides some monadic actions for building Modules. It gives you access to a fresh supply of unique Bits, automatically accumulates Cells, and allows for Bit unification (feedback loops.)

Optimistically added components that never ended up getting used? Automatically prune them with the simplify from Circus.Simplify!

When you're all done, call renderModuleBS or renderModuleString to get a JSON representation ready to ship off to netlistsvg. Easy as that, my dude.