@hackage circus0.1.0.0

Types and a small DSL for working with netlistsvg

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.