packages feed

madlang-2.4.0.0: README.md

# Madlang DSL for generating random text

[![Build Status](https://travis-ci.org/vmchale/madlibs.svg?branch=master)](https://travis-ci.org/vmchale/madlibs)

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. It runs from the command line, but also provides a Haskell library that can be integrated into [other projects](https://github.com/vmchale/toboggan), compiled to a [web app](https://github.com/vmchale/madlang-reflex), or used as an EDSL.

There is also a vim plugin for syntax highlighting, available [here](https://github.com/vmchale/madlang-vim).

It can be used for twitter bots (among other things) and provides human-readable
syntax for generating text.

## Examples

An example is worth a thousand words, so suppose you wanted to generate a mediocre fortune telling bot. You could write the following code:

```madlang
:define person
    0.7 "A close friend will "
    0.3 "You will "
:define goodfortune
    0.2 person "make rain on the planet Mars"
    0.8 "nice things will happen today :)"
:define fortune
    0.5 "drink a boatload of milk"
    0.5 "get angry for no reason"
:define intense
    1.0 person "wrestle in the WWE".to_upper
    1.0 person "bite in a bottle of hot sauce".to_upper
:return
    0.7 person fortune
    0.1 intense
    0.2 goodfortune
```

### Syntax

There are two keywords in madlang you'll use most: `:define` and `:return`. `:return` is the main string we'll be spitting back; there can be only one per file. `:define` on the other hand can be used to make functions. These functions are combinations of templates, organizing pairs of weights and strings.

There is a Shakespearean insult generator demo available in
`demo/shakespeare.mad`

## Installation

### Releases

### Nix

If you're on linux or mac, you can get up-to-date binaries via nix.

Download nix with

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

From there, `nix-env -i madlang` will install the proper executables.

### Stack

Download `stack` with

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

Then run `stack install madlang --resolver nightly` and you'll get the `madlang` executable installed on your path. This may take a bit of time, as it will build *all* dependencies of `madlang` first.

### Use

To use it, try

```
 $ madlang run demo/shakespeare.mad
```

You can do `madlang --help` if you want a couple other options for debugging.

## Using the Haskell library

One function you might want to use is `runFile`; it reads a file and generates randomized text:

```
 λ:> runFile [] "demo/shakespeare.mad"
 "Thou hasty-witted gleeking puttock!"
```

To use the library as an EDSL, there are two options: splicing in a file or
using a quasi-quoter, viz.

```haskell
demo :: IO T.Text
demo = run
    $(madFile "demo/shakespeare.mad")

demo :: IO T.Text
demo = run [|madlang
:define f
    1.0 "heads"
    1.0 "tails"
:return
    1.0 f|]
```

Haddock documentation of all library functionality is located [here](https://hackage.haskell.org/package/madlang#readme).

## Syntax Highlighting

Syntax highlighting for the DSL is provided in the vim plugin [here](http://github.com/vmchale/madlang-vim). It includes integration with [syntastic](https://github.com/vim-syntastic/syntastic).