Coconut
=======

Coconut_ is a simple, modern, developer-friendly scripting language that compiles to Python, built for functional programming.

.. _Coconut: https://github.com/evhub/coconut

.. image:: https://travis-ci.org/evhub/coconut.svg?branch=master

Installation
------------

Enter in console::

    pip install coconut

Command Line
------------

Usage::

  coconut [-h] [-v] [-s] [-r] [-i] [-d [level]] [-c code] [--autopep8 ...] [source] [dest]

Positional Arguments::

  source                path to the coconut file/module to compile
  dest                  destination directory for compiled files (defaults to the source directory)

Optional Arguments::

  -h, --help            show this help message and exit
  -v, --version         print coconut and python version information
  -s, --strict          enforce code cleanliness standards
  -r, --run             run the compiled source instead of writing it
  -i, --interact        force the interpreter to start (otherwise starts if no other command is given)
  -d, --debug           enable debug output (level: 0 is off, no arg defaults to 1, max is 2)
  -c, --code            run a line of coconut passed in as a string
  --autopep8            use autopep8 to format compiled code (remaining args passed to autopep8)

Syntax
------

Coconut is based on Python 3 syntax and compiles to Python 3 code. Coconut makes significant changes from Python 3 syntax, however:

- New operators:
    - compose: ``..`` (in-place: ``..=``)
    - partial/islice: ``$``
    - pipeline: ``|>`` (in-place: ``|>=``)
    - lambda: ``->``
    - chain: ``::`` (in-place: ``::=``)
- New syntax:
    - infix function calling: new ``6 `mod` 3`` syntax
    - operator functions: new ``(+)`` syntax
    - function definition: alternative ``f(x) = x`` syntax
    - non-decimal integers: alternative ``10110_2`` syntax
- Changed syntax:
    - unicode symbols: supports unicode alternatives for most symbols
    - lambda keyword: removed (use the lambda operator instead)
- New built-ins:
    - right reduce: ``reduce``
    - zip with function: ``zipwith``
    - tail recursion elimination: ``recursive``
- New constructs: (planned)
    - operator [re]definition
    - pattern matching
