madlang: Randomized templating language DSL

[ bsd3, library, text ] [ Propose Tags ]

Madlang is a text templating language written in Haskell, meant to explore computational creativity and generative literature.


[Skip to Readme]

Modules

[Last Documentation]

  • Text
    • Text.Madlibs

Flags

Manual Flags

NameDescriptionDefault
development

Turn on '-Werror'

Disabled
Automatic Flags
NameDescriptionDefault
llvm-fast

Enable build with llvm backend (produces a faster executable)

Disabled
library

Don't build an executable

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'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5, 1.0.0.0, 1.0.0.1, 1.0.1.0, 1.1.1.0, 1.1.2.0, 1.1.3.0, 2.0.0.0, 2.0.0.1, 2.0.1.0, 2.0.1.1, 2.0.1.2, 2.1.0.0, 2.1.0.1, 2.1.0.2, 2.1.0.3, 2.1.0.4, 2.1.1.0, 2.1.1.1, 2.1.1.2, 2.1.1.3, 2.1.2.0, 2.2.0.1, 2.3.0.2, 2.3.0.3, 2.3.0.4, 2.3.0.5, 2.3.0.6, 2.3.1.0, 2.3.1.1, 2.3.2.0, 2.4.0.0, 2.4.0.1, 2.4.0.2, 2.4.1.0, 2.4.1.1, 2.4.1.2, 2.4.1.3, 2.4.1.4, 2.4.1.5, 2.4.1.6, 2.4.2.0, 2.4.2.1, 2.4.2.2, 2.4.2.3, 2.4.2.4, 2.4.2.5, 2.4.2.6, 2.4.2.7, 2.4.2.8, 2.4.2.10, 2.4.2.11, 2.4.2.12, 2.4.2.13, 2.4.2.14, 2.4.2.20, 2.4.2.21, 2.4.2.22, 2.4.2.25, 3.0.0.0, 3.0.0.1, 3.0.0.3, 3.0.0.4, 3.1.0.0, 3.1.0.1, 3.1.0.2, 3.1.0.5, 3.1.0.6, 3.1.0.7, 3.1.0.10, 3.1.1.0, 3.1.1.1, 3.1.1.6, 3.1.1.7, 3.1.1.13, 3.1.1.18, 3.1.1.20, 3.1.1.21, 3.1.2.0, 3.2.0.0, 3.2.0.1, 4.0.0.0, 4.0.0.1, 4.0.0.2, 4.0.0.3, 4.0.0.4, 4.0.1.0, 4.0.1.1, 4.0.2.0, 4.0.2.1, 4.0.2.2, 4.0.2.5, 4.0.2.6, 4.0.2.7, 4.0.2.8, 4.0.2.9, 4.0.2.11, 4.0.2.12, 4.0.2.13, 4.0.2.14, 4.0.2.15, 4.0.2.16
Dependencies ansi-wl-pprint, base (>=4.8 && <5), bytestring, composition-prelude (>=0.1.1.0), containers, directory, file-embed, http-client, madlang, megaparsec (>=6.0 && <7.0), MonadRandom, mtl, optparse-applicative, random-shuffle, recursion-schemes, tar, template-haskell, text, zlib [details]
License BSD-3-Clause
Copyright Copyright: (c) 2016-2017 Vanessa McHale
Author Vanessa McHale
Maintainer vanessa.mchale@reconfigure.io
Revised Revision 1 made by vmchale at 2018-09-04T23:15:14Z
Category Web
Home page https://hub.darcs.net/vmchale/madlang
Source repo head: darcs get https://hub.darcs.net/vmchale/madlang
Uploaded by vmchale at 2017-10-08T04:15:44Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Executables madlang
Downloads 61174 total (115 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2017-10-08 [all 3 reports]

Readme for madlang-2.4.2.4

[back to package description]

Madlang DSL for generating random text

Windows build status Build Status

This is the Madlang DSL for generating text. You specify a template, and Madlang will create randomized text from the template.

Madlang is an interpreted language, written in Haskell. The primary way to use Madlang is on the command line using the interpreter, but there is also a partially completed library and EDSL.

Madlang is intended to explore computational creativity and provide an easy way to get started with generative literature.

Installation

Stack

Download stack with

curl -sSL http://haskellstack.org | sh

Then run stack install madlang --resolver nightly. This is the recommended way to install madlang, but it may take awhile.

Nix

If you're on linux or mac, you can get binaries via nix.

Download nix with

curl https://nixos.org/nix/install | sh

From there, nix-env -i madlang will install the executable.

Tutorial

The smallest program possible in Madlang is simply a return declaration, viz.

:return
    1.0 "heads"
    1.0 "tails"

The :return tells us this that this will be the final value when run, while the numbers in front of the strings denote relative weights. Save this as gambling.mad, and run

 $ madlang run gambling.mad
 heads

Now let's try something a little more complicated:

:define person
    1.0 "me"
    1.0 "you"

:return
    1.0 "The only one of us walking out of this room alive is going to be " person "."

A bit more sinister, perhaps. The :define statement there declares a new identifier, which we can later reference. Save this as fate.mad and run:

 $ madlang run fate.mad
 The only one of us walking out of this room alive is going to be you.

We can also refer to another identifier within a :define block.

:define coin
    1.0 "heads"
    1.0 "tails"

:define realisticCoin
    1.0 coin
    0.03 "on its side"

:return realisticCoin

In addition to identifiers, we can also define categories. Categories are just groups of identifiers. We can define one like so:

:define color
    1.0 "yellow"
    1.0 "blue"

:define texture
    1.0 "soft"
    1.0 "scratchy"
    1.0 "dimpled"

:category adjective
    color
    texture

:return
    1.0 adjective

Then, when we can adjective, it will pick one of "yellow", "blue",… "dimpled" with equal probability.

Finally, one of the most powerful features of madlang is the ability to include libraries in a file. Open the following and save it as gambling.mad:

:define coin
    1.0 "heads"
    1.0 "tails"

:return
    1.0 ""

Then, open the following and save it in the same directory as realistic-gambling.mad:

:include gambling.mad

:define realisticGambling
    1.0 coin
    0.03 "on its side"

:return
    1.0 realisticGambling

Then run it with:

 $ madlang run realistic-gambling.mad

madlang comes with several libraries prepackaged. You can install them for the current user with:

 $ madlang install

Try this out:

:include colors.mad

:define weirdDog
    1.0 colors-color "dog"

:return
    1.0 "On my walk today I saw a " weirdDog "."

Examples

There is a dog complimenter available to test out at my site.

Tooling

Vim

There is a vim plugin available here.

Project Templates

There is a project template bundled with pi, which you can install with

 $ curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/project-init

and invoke with

 $ pi new madlang story

Manpages

You can view documentation for madlang on Linux, Mac, or BSD by typing:

 $ man madlang