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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
]>
<article id="visual-haskell">
<articleinfo>
<title>Visual Haskell User's Guide</title>
<author>
<firstname>Simon</firstname>
<surname>Marlow</surname>
<email>simonmar@microsoft.com</email>
</author>
<author>
<firstname>Krasimir</firstname>
<surname>Angelov</surname>
<email>kr.angelov@gmail.com</email>
</author>
</articleinfo>
<section id="sec-introduction">
<title>Introduction</title>
<para>Visual Haskell is a plugin for Microsoft's Visual Studio
development environment to support development of Haskell software.
Like the other Visual languages, Visual Haskell integrates with the
Visual Studio editor to provide interactive features to aid Haskell
development, and it enables the construction of projects consisting of
multiple Haskell modules.</para>
<section id="sec-obtaining">
<title>Installing Visual Haskell</title>
<para>In order to use Visual Haskell, you need <ulink url="http://msdn.microsoft.com/vstudio/productinfo/">Visual Studio .NET
2003</ulink>. Right now, this is the only supported version of Visual
Studio - unfortunately we haven't yet added support for the 2005
Beta. The Express languages (Visual C++ Express etc.) also will not
work, because they don't have support for plugins.</para>
<para>You don't need to install GHC separately: Visual Haskell
is bundled with a complete GHC distribution, and various other tools
(Happy, Alex, Haddock).</para>
<para>The latest Visual Haskell installer can be obtained from
here:</para>
<para><ulink
url="http://www.haskell.org/visualhaskell/"><literal>http://www.haskell.org/visualhaskell/</literal></ulink></para>
</section>
<section id="release-notes">
<title>Release Notes</title>
<section>
<title>Version 0.0, first release</title>
<para>This release is a technology preview, and should be considered
alpha quality. It works for us, but you are fairly likely to
encounter problems. If you're willing to try it out and report
bugs, we'd be grateful for the feedback.</para>
<itemizedlist>
<listitem>
<para>This release of Visual Haskell is bundled with a
development snapshot of GHC, version 6.5 from around 14
September 2005. This version of GHC is used to provide the
interactive editing features, and will be used to compile all
code inside Visual Haskell. It is possible that in future
releases we may be able to relax this tight coupling between
Visual Haskell and the bundled GHC.</para>
<para>Please note that future releases of Visual
Haskell will update the compiler, and hence the
packages, and so may break your code. Also note that because
the bundled GHC is not a released version, it may have bugs and
quirks itself: please report them as usual to
<email>glasgow-haskell-bugs@haskell.org</email>.</para>
</listitem>
<listitem>
<para>We're not making source code for the plugin generally
available at this time, due to licensing restrictions on the
Visual Studio APIs that the plugin uses (for more
information see <ulink
url="http://msdn.microsoft.com/vstudio/extend/">Visual Studio
Extensibility Center</ulink>). If you're interested in
contributing to Visual Haskell, please get in touch with the
authors.</para>
</listitem>
</itemizedlist>
</section>
</section>
<section id="sec-bugs">
<title>Getting support, reporting bugs</title>
<para>Please report bugs to
<email>glasgow-haskell-bugs@haskell.org</email> (subscribe <ulink url="http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs">here</ulink>), clearly indicating
that your bug report relates to Visual Haskell, and giving as much
information as possible so that we can reproduce the bug. Even if
you can't reproduce the bug reliably, it is still useful to report
what you've seen.</para>
<para>For help and support, use the
<email>glasgow-haskell-users@haskell.org</email> (subscribe <ulink
url="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users">here</ulink>) mailing list.</para>
</section>
<section id="sec-license">
<title>License</title>
<blockquote>
<para>Copyright © Microsoft Corporation. All rights reserved.</para>
<para>Copyright © The University of Glasgow. All rights reserved.</para>
<para>Copyright © Krasimir Angelov. All rights reserved.</para>
<para>Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:</para>
<itemizedlist>
<listitem>
<para>Redistributions of source code must retain the above
copyright notice, this list of conditions and the following
disclaimer.</para>
</listitem>
<listitem>
<para>Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.</para>
</listitem>
<listitem>
<para>The names of the copyright holders may not be used to endorse
or promote products derived from this software without specific
prior written permission.</para>
</listitem>
</itemizedlist>
<para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.</para>
</blockquote>
</section>
</section>
<section id="sec-using">
<title>Using Visual Haskell</title>
<section>
<title>Overview of features</title>
<para>The following features are provided in the Visual Studio editor
when editing Haskell code:</para>
<itemizedlist>
<listitem>
<para>Automatic checking of code as you type, and visual indication
of parse errors, scoping errors and type errors.</para>
</listitem>
<listitem>
<para>Quick info: hovering the mouse over an identifier pops up
an information box, including the type of the identifier.</para>
</listitem>
<listitem>
<para>A drop-down bar at the top of the editing window lists the
top-level declarations in the module, and allows quick navigation
to a declaration.</para>
</listitem>
<listitem>
<para>Name completion for identifiers in scope: press Ctrl+Space
after a partial identifier to see the completions.</para>
</listitem>
<listitem>
<para>Go to declaration: right clicking on an identifier and
selecting "Go to declaration" will jump the cursor to the
declaration of the identifier. This works for locally-defined
identifiers and those defined in another module of the project; it
does not work for library functions currently.</para>
</listitem>
</itemizedlist>
<para>The following features are provided by the project system for
constructing Haskell projects:</para>
<itemizedlist>
<listitem>
<para>Multi-module Haskell projects are fully supported, based on the
<ulink url="http://www.haskell.org/cabal">Cabal</ulink>
infrastructure. A project in Visual Haskell <emphasis>is</emphasis>
a Cabal package, and vice-versa. A Visual Studio project can be
taken to a machine without Visual Haskell and built/installed as a
normal Cabal package, and an existing Cabal package can be edited
directly in Visual Haskell<footnote><para>This works as long as the
Cabal package is using Cabal's simple build system; Cabal
packages using their own build systems cannot be edited in Visual
Haskell.</para>
</footnote>.</para>
</listitem>
<listitem>
<para>Editing of most of the package meta-data is supported through
the project property pages.</para>
</listitem>
<listitem>
<para>The interactive editing features work across multiple modules in
a project. When one module is edited, changes are automatically
propagated to dependent modules, even if the edited module has not yet
been saved.</para>
</listitem>
<listitem>
<para>Building is supported through the Cabal build system, and build
errors are communicated back to the editor and placed in the task
list. Use any of the Visual Studio build commands (e.g. Build
Project from the context menu on the project, or Ctrl-Shift-B to
build the whole solution).</para>
</listitem>
</itemizedlist>
<para>Additionally, Visual Haskell is bundled with a large collection of
documentation: the GHC manual, the hierarchical libraries reference, and
other material all of which can be browsed within Visual Studio
itself.</para>
</section>
<section>
<title>Getting Started</title>
<para>After installing Visual Haskell, start up Visual Studio as you
would normally, and observe that on the splash screen where it lists
the supported languages you should now see an icon for Visual
Haskell (if you don't see this, something has gone wrong... please let
us know).</para>
<para>Firstly, take a look at the bundled documentation. Go to
Help->Contents, and you should see the “Visual Haskell Help
Collection”, which contains a large collection of GHC and
Haskell-related documentaiton, including this document.</para>
<para>To start using Visual Haskell right away, create a new
project (File->New->Project...). Select one of the Haskell
project types (Console Application or Library Package), and hit Ok.
The project will be created for you, and an example module
added: <literal>Main.hs</literal> for an application, or
<literal>Module1.hs</literal> for a library.</para>
<para>You can now start adding code to
<literal>Main.hs</literal>, or adding new modules. To add a new
module, right-click on the <literal>src</literal> directory, and
select Add->New Item. Visual Haskell supports hierarchical
modules too: you can add new folders using the same Add menu to
create new nodes in the hierarchy.</para>
<para>If you have any errors in your code, they will be underlined with
a red squiggly line. Select the Tasks window (usually a tab near the
bottom of the Visual Studio window) to see the error messages, and
click on an error message to jump to it in the editor.</para>
<para>To build the program, hit Ctrl-Shift-B, or select one of the
options from the Build menu.</para>
</section>
<section>
<title>Editing Haskell code</title>
<para>(ToDo: more detail here)</para>
<para>Your module must be plain Haskell (<literal>.hs</literal>) for
the interactive features to fully work. If your module is
pre-processed with CPP or Literate Haskell, then Visual Haskell will
only check the module when it is saved; between saves the source will
not be checked for errors and the type information will not be
updated. If the source file is
pre-processed with Happy or another pre-processor, then you may have
to build the project before the type information will be updated
(because the pre-processor is only run as part of the build process).
Pre-processed source files work fine in a multi-module setting; you
can have modules which depend on a pre-processed module and full
interactive checking will still be available in those modules.</para>
<para>Because Visual Haskell is using GHC as a backend for its
interactive editing features, it supports the full GHC language,
including all extensions.</para>
</section>
<section>
<title>Using Projects</title>
<para>(ToDo: more detail here)</para>
</section>
</section>
</article>
|