THE VERY SHORT INTRODUCTION TO FISHKILL

Homepage: http://fishkill.yurusanai.de
Email: fishkill@yurusanai.de

Fishkill is a minimalist functional programming language.
Some might call it a toy language. It is based entirely on 
pattern matching of function parameters. There are no 
data types (or you might say there is a single data type). 
Arbitrary constructors can be defined by just using them.

There are some basic conventions about how to represent
boolean, list, integer, and string values in Fishkill by 
using a certain set of constructor names.

Booleans:	False and True
Lists:		Nil and Cons(<first element>, <rest of list>)
Integers:	list of booleans that represent bits
Strings:	list of integers that represent characters

Integers, strings, and lists also have literal variants
that can be used in program source code. These literals
are translated into their constructor equivalents by the
interpreter. For example, the integer 4 turns into:

	Cons(False, Cons(False, Cons(True, Nil)))

You can see that integers are lists of bits given as 
boolean values, with the higher-order bits towards the
tail of the list.

You can take a look at the standard library contained in 
the file std.f to get a feel for the syntax and probably
even the semantics of the language. A yacc grammar can be
found in the file grammar.y.

Note that all operators have the same precedence and
associate to the left, so "x + 3 * y" does not mean what 
you might think it means.

A hello world program in Fishkill looks like this:

	main(argc, argv) = "Hello World!"

Like in C, one has to define a function called "main". This 
function gets passed the number of command line arguments 
as its first argument and a list of strings that contain the 
command line arguments as its second argument. The first 
argument is always the file name of the running program. The 
result of the main function is printed by the interpreter 
after evaluating the program.
