context-free-art: Generate art from context-free grammars

[ bsd3, graphics, library, program ] [ Propose Tags ]

Create art via context free grammar production rules.

Context free grammar primer

Context free grammars consist of a set of terminal symbols, a set of non-terminal symbols, and production rules that map non-terminals to other symbols.

With a context-free grammar, we can generate strings of terminals that conform to the specified language.

Our language will describe graphics.


import Art.ContextFree
import Data.List.NonEmpty

-- Let's define a Production rule
a = Circle 1

-- This will produce an IO Svg from the blaze-svg package
-- to turn it into a string we can use one of the `blaze-svg` renderers
graphic1 = interpret $ Circle 1

-- let's create a non-terminal, 'a', which renders a terminal, 'Circle 1'
-- and has an 85% chance of rendering another circle, placed to its right
a = NonTerminal $ (100, Circle 1) :| [(85, b)]
b = Mod [Move (2, 0)] a


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,,,
Change log
Dependencies base (>=4.12 && <5), bifunctors (>=5.5), blaze-markup, blaze-svg (>=0.3.6), HUnit (>=1.6), random (>=1.1), safe, text (>=1.2), text-show (>=3.8) [details]
License BSD-3-Clause
Author Owen Shepherd
Category Graphics
Home page
Uploaded by 414owen at 2019-10-24T23:55:48Z
Distributions NixOS:
Executables tests
Downloads 2350 total (25 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]