File: intro.html

package info (click to toggle)
hugs 1.4.199801-1
  • links: PTS
  • area: non-free
  • in suites: slink
  • size: 7,220 kB
  • ctags: 5,609
  • sloc: ansic: 32,083; haskell: 12,143; yacc: 949; perl: 823; sh: 602; makefile: 236
file content (50 lines) | stat: -rw-r--r-- 3,137 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

<title> The Haskore Tutorial: Introduction </title>
<body bgcolor="#ffffff"><i>The Haskore Tutorial</i><br><a href="index.html">top</a> <a href="Haskore.html">next</a><hr>
<a name="intro"></a><p>
<a name="sect1"></a>
<h2>1<tt>&nbsp;&nbsp;</tt>Introduction</h2>
<p>
<I>Haskore</I> is a collection of Haskell modules designed for
expressing musical structures in the high-level, declarative style of
<I>functional programming</I>.  In Haskore, musical objects consist of
primitive notions such as notes and rests, operations to transform
musical objects such as transpose and tempo-scaling, and operations to
combine musical objects to form more complex ones, such as concurrent
and sequential composition.  From these simple roots, much richer
musical ideas can easily be developed.<p>
Haskore is a means for describing <I>music</I>---in particular Western
Music---rather than <I>sound</I>.  It is not a vehicle for synthesizing
sound produced by musical instruments, for example, although it does
capture the way certain (real or imagined) instruments permit control
of dynamics and articulation.<p>
Haskore also defines a notion of <I>literal performance</I> through
which <I>observationally equivalent</I> musical objects can be
determined.  From this basis many useful properties can be proved,
such as commutative, associative, and distributive properties of
various operators.  An <I>algebra of music</I> thus surfaces.<p>
In fact a key aspect of Haskore is that objects represent both 
<I>abstract musical ideas</I> and their <I>concrete implementations</I>.
This means that when we prove some property about an object, that
property is true about the music in the abstract <I>and</I> about its
implementation.  Similarly, transformations that preserve musical
meaning also preserve the behavior of their implementations.  For this
reason Haskell is often called an <I>executable specification
language</I>; i.e. programs serve the role of mathematical specifications
that are directly executable.<p>
Building on the results of the functional programming community's
Haskell effort has several important advantages: First, and most
obvious, we can avoid the difficulties involved in new programming
language design, and at the same time take advantage of the many years
of effort that went into the design of Haskell.  Second, the resulting
system is both <I>extensible</I> (the user is free to add new features
in substantive, creative ways) and <I>modifiable</I> (if the user
doesn't like our approach to a particular musical idea, she is free to
change it).<p>
In the remainder of this paper I assume that the reader is familar
with the basics of functional programming and Haskell in particular.
If not, I encourage reading at least <I>A Gentle Introduction to
Haskell</I> [<a href="tutorial.html#$haskell-tutorial">HF92</a>] before proceeding.  I also assume
some familiarity with <I>equational reasoning</I>; an excellent
introductory text on this is [<a href="tutorial.html#$birdwadler88">BW88</a>].<p>
<hr><body bgcolor="#ffffff"><i>The Haskore Tutorial</i><br><a href="index.html">top</a> <a href="Haskore.html">next</a>