© vhs/vhs-am team integrating haskell with visual studio assignment manager andré santos &...

56
© VHS/VHS-AM Team Integrating Integrating Haskell Haskell with with Visual Studio Assignment Visual Studio Assignment Manager Manager André Santos & VHS/VHS-AM Team [email protected]

Upload: melvin-elliott

Post on 17-Dec-2015

240 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

IntegratingIntegrating Haskell Haskell withwith Visual Visual Studio Assignment ManagerStudio Assignment Manager

André Santos & VHS/VHS-AM [email protected]

Page 2: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

HaskellHaskell• Pure functional programming languagePure functional programming language• Strenghts...Strenghts...

– High level of abstractionHigh level of abstraction– Concise code (4x to 10x smaller)Concise code (4x to 10x smaller)– Strong Mathematical foundationStrong Mathematical foundation– Modules, Abstract Data TypesModules, Abstract Data Types– Polymorphism, high order functions, Strong typingPolymorphism, high order functions, Strong typing– higher productivity, easier maintenance, higher higher productivity, easier maintenance, higher

code reusecode reuse– Lazy Semantics Lazy Semantics infinite data structures infinite data structures

• But weaknesses too...But weaknesses too...– Limited Integration with other technologiesLimited Integration with other technologies– No powerful IDEsNo powerful IDEs

Page 3: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Project HistoryProject History• Haskell + VS.NET Integration Haskell + VS.NET Integration VHS VHS

ProjectProject– Personal initiative/interest: Personal initiative/interest:

André and Simon Marlow (MSR)André and Simon Marlow (MSR)– started by mid-2003started by mid-2003

Assignment Manager extensions RFPAssignment Manager extensions RFP– RFP for extending Assignment Manager RFP for extending Assignment Manager

(end of 2003)(end of 2003)– MS Shared Source tool for submitting and MS Shared Source tool for submitting and

evaluating student assignmentsevaluating student assignments The VHS-AM ProjectThe VHS-AM Project

Page 4: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Combined ObjectivesCombined Objectives

• Allow the use of Assignment Manager for Allow the use of Assignment Manager for teaching Haskell by extending Assignment teaching Haskell by extending Assignment Manager and/or Visual Studio .NETManager and/or Visual Studio .NET

• Have a full IDE for HaskellHave a full IDE for Haskell

VHS-AM ProjectProjectVHS ProjectVHS Project

Page 5: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

This presentationThis presentation

•MS Assignment Manager•VHS (Visual Haskell) and VSIP program•Demo•Conclusions and Future Work

Page 6: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Assignment ManagerAssignment Manager

• Faculty (teaching) Faculty (teaching) ToolsTools

• Student ToolsStudent Tools• Assignment ManagerAssignment Manager

Page 7: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Faculty ToolsFaculty Tools• Set of tools for managing the Set of tools for managing the

publishing of courses and course taskspublishing of courses and course tasks• Two main parts:Two main parts:

– Assignment Publishing ToolsAssignment Publishing Tools– Code ExtractionCode Extraction

Page 8: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Assignment Publishing Assignment Publishing ToolsTools• Allows the publishing of courses and Allows the publishing of courses and

taskstasks• Students access the course Students access the course

site/materials therough:site/materials therough:– webweb serverserver (http:// ...) (http:// ...)– network share (\\Server\folder)network share (\\Server\folder)– ftp server (ftp:// ...)ftp server (ftp:// ...)

Page 9: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Adding a new courseAdding a new course

Page 10: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 11: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 12: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Submitting a new taskSubmitting a new task

Page 13: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Disponibilizando Disponibilizando uma tarefa ...uma tarefa ...

Page 14: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Code ExtractorCode Extractor• Allows teacher to hide parts of the Allows teacher to hide parts of the

source code of a projectsource code of a project• Tells the students where to write their Tells the students where to write their

own codeown code• ““Template” projectsTemplate” projects

Page 15: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Hiding code...Hiding code...

Page 16: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 17: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 18: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Student perspective...Student perspective...

Page 19: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Student ToolsStudent Tools• Allow the students to see the courses’ Allow the students to see the courses’

sitessites

Page 20: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 21: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 22: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

After joining a course After joining a course the student can see the student can see what tasks are what tasks are available...available...

Page 23: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Assignment ManagerAssignment Manager• Improved version of the Improved version of the Assignment Assignment

Publishing ToolsPublishing Tools• Web application, that requires:Web application, that requires:

– ASP.NETASP.NET– SQLServer or SQLServer or Microsoft Data EngineMicrosoft Data Engine– Internet Information ServicesInternet Information Services (IIS) (IIS)– Microsoft Message QueuingMicrosoft Message Queuing (MSMQ) (MSMQ)

Page 24: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

A.M.A.M. Architecture Architecture

Assignment Assignment Manager ServerManager Server

Faculty Clients

Student Clients Student Clients

Creation of a

Creation of a coursecourse

Publishes ta

sks and marks

Publishes ta

sks and marks

Access to available ta

sks

Access to available ta

sks

Solution submissionSolution submission

Access to marks

Access to marks

Page 25: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

A.M.A.M. – Communication – Communication

• Lecturers can contact students Lecturers can contact students through:through:– E-mailE-mail– Internal message systemInternal message system

Page 26: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 27: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

A.M.A.M. – Publishing tasks – Publishing tasks

• Auto-build Auto-build andand auto-check auto-check • Extra files (e.g. I/O)Extra files (e.g. I/O)• Messages:Messages:

– Send ReminderSend Reminder, , Send Past Due NoticeSend Past Due Notice, , New Project NoticeNew Project Notice, , Updated Project Updated Project NoticeNotice

Page 28: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

A.M.A.M. – publishing tasks – publishing tasks

• After student submissions teacher can After student submissions teacher can assign marksassign marks

• Marks are available to studentsMarks are available to students

Page 29: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 30: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 31: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 32: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 33: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Page 34: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

•Project History & Objectives•MS Assignment Manager•VHS (Visual Haskell) and VSIP program•Demo•Conclusions and Future Work

Page 35: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Existing Haskell IDEsExisting Haskell IDEs

• Some tools have some Haskell support:Some tools have some Haskell support:– syntax colouringsyntax colouring– indentation (hard in Haskell!)indentation (hard in Haskell!)– jump to errorsjump to errors– menu of top-level declarationsmenu of top-level declarations– jump to definitionjump to definition– interactive compilation/evaluationinteractive compilation/evaluation– display type of an identifierdisplay type of an identifier

• Some tools: emacs, vi(m), WinHugs, Eclipse Some tools: emacs, vi(m), WinHugs, Eclipse plugin plugin

Page 36: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ProblemsProblems

• Language support tends to be unreliable, Language support tends to be unreliable, because these environments are not because these environments are not using a real Haskell front-endusing a real Haskell front-end. . eg. eg. Colouring support in Emacs is really badColouring support in Emacs is really bad

• Different language flavours: Different language flavours: Haskell98+FFI, hierarchical modules, Haskell98+FFI, hierarchical modules, CPP, literateCPP, literate

• Jumping to an error often misses Jumping to an error often misses (compilers don’t have good source loc (compilers don’t have good source loc info)info)

• No real compilation supportNo real compilation support• Many, many, many more things an IDE Many, many, many more things an IDE

can do…can do…

Page 37: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

VHS Project ObjectivesVHS Project Objectives

• Integrate GHC with Visual Studio to Integrate GHC with Visual Studio to make a decent Haskell IDEmake a decent Haskell IDE

• Specify a programatic interface to Specify a programatic interface to GHC so that it can be re-used in other GHC so that it can be re-used in other IDE-like contexts.IDE-like contexts.

Page 38: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Background: Visual Background: Visual StudioStudio

• Development shell, with several language plugins: Development shell, with several language plugins: VC++, VC#, VJ#, VBVC++, VC#, VJ#, VB

• Very rich feature setVery rich feature set– Lots of support for language integrationLots of support for language integration– Projects: multi-file applications/librariesProjects: multi-file applications/libraries– Solutions: multiple projectsSolutions: multiple projects– DebuggingDebugging– Integrated documentation, context-sensitive help etc.Integrated documentation, context-sensitive help etc.– Lots of support for automation/extension/customisationLots of support for automation/extension/customisation

• ““free” access to the integration APIs: free” access to the integration APIs: VSIPVSIP• Windows onlyWindows only

Page 39: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

VSIPVSIP• VVisual isual SStudio tudio IIndustry ndustry PPartnersartners

– set of COM APIs for integrating new set of COM APIs for integrating new functionality into VS:functionality into VS:• Language support in the editorLanguage support in the editor• ProjectProject• ToolsTools

– ““freely available” SDKfreely available” SDK– APIs are highly detailed, flexible & HUGEAPIs are highly detailed, flexible & HUGE– Babel (Daan Leijen) provides a simpler Babel (Daan Leijen) provides a simpler

abstraction layer for integrating simple abstraction layer for integrating simple language supportlanguage support

– http://http://www.vsipdev.comwww.vsipdev.com

Page 40: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

VS.NET IDE Itself

-Basic level of automation/extension

- customization of the IDE and creation of new components for VS.NET programming.

VS.NET Macros

- Widely supported by the IDE: Macros Explorer, VSMacros IDE, supports recording, debugging, etc.

- Can’t create GUIs, tool windows, etc.

VS.NET Add-Ins

- Higher integration: creation of new applications embeddded in VS.NET, including GUI

- Ideal for medium complexity extensions

- can’t be used to define new languages

VS.NET Wizards

- Takes the programmer step-by-step on the execution of a task

Extending VS.NETExtending VS.NET• VS.NET Extension Mechanisms:VS.NET Extension Mechanisms:

VSIP

- More powerful and much more complex

- The only way of supporting new programming languages and new project types

- Current version supports using managed code

- Used to implement most of our use cases

Page 41: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Using VSIPUsing VSIP

Visual Studio

Babel

VSIP COM interfaces

Parser, type

checker,etc.

C/C++

Babel COM interfaces

Compiler

Direct to VSIP for project

support

Lex/Yacc parser or

Implementation of Babel Interfaces

Page 42: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

VHS ProjectVHS Project

Visual Studio

Babel

VSIP COM interfaces

HaskellService

C/C++ Haskell

Babel COM interfaces

GHC

Direct to VSIP for project

support

Page 43: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Status of the VHS Status of the VHS ProjectProject

• We have:We have:– Syntax colouringSyntax colouring– accurate indication of erroneous accurate indication of erroneous

subexpressionssubexpressions– Parsing/renaming/type-checking as you type Parsing/renaming/type-checking as you type

(in a separate thread)(in a separate thread)– Brace matchingBrace matching– (Partial) (Partial) Project support including A.M. Project support including A.M.

supportsupport– Prototype of quick info supportPrototype of quick info support– Prototype of method tips supportPrototype of method tips support– Prototype of autocompletionPrototype of autocompletion

Page 44: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 45: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 46: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 47: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 48: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

DemosDemos

Method tip

Quick info + pop-up list

Taskbar errors

Brace Matching

Page 49: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Features we wantFeatures we want• Extend Brace matching (e.g. let/in)Extend Brace matching (e.g. let/in)• Drop-down menu of top-level declsDrop-down menu of top-level decls• OutliningOutlining• Jump to definition (or docs for library fns)Jump to definition (or docs for library fns)• Easy access to documentationEasy access to documentation• Code model (programatic access to the source code)Code model (programatic access to the source code)• Inferred types tooltipsInferred types tooltips• Type of subexpressionType of subexpression• Further Project support:Further Project support:

– Multi-module support (automatically discover Multi-module support (automatically discover dependencies, etc.)dependencies, etc.)

– Library-infrastructure support (import/export Library-infrastructure support (import/export library infrastructure metadata gives a nice way library infrastructure metadata gives a nice way to package & ship a project)to package & ship a project)

Page 50: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

More ambitious More ambitious featuresfeatures

• Integrated FFI toolsIntegrated FFI tools• .NET integration.NET integration• DebuggingDebugging• GUI BuilderGUI Builder

Page 51: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Current StatusCurrent Status

• Simon:Simon:– Use H/Direct for accessing COM APIs Use H/Direct for accessing COM APIs – Multi-threading support in GHC’s RTS Multi-threading support in GHC’s RTS

(parsing & colouring run in separate OS (parsing & colouring run in separate OS threads)threads)

– Syntax ColoringSyntax Coloring– Accurate source location info in GHC’s Accurate source location info in GHC’s

internal abstract syntaxinternal abstract syntax– Support in GHC to build GHC as a packageSupport in GHC to build GHC as a package– Error messages in Error messages in taskbartaskbar

Page 52: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Current StatusCurrent Status

• VHS-AM Team:VHS-AM Team:– Assignment Manager integrationAssignment Manager integration through through

Basic project support and Basic project support and compile/build/run cyclecompile/build/run cycle

– Brace matchingBrace matching– Prototypes of method tips (a.k.a. Prototypes of method tips (a.k.a.

“function” tips), quick info, complete-“function” tips), quick info, complete-wordword

– GHCi Integration (in the works)GHCi Integration (in the works)

• Krasimir: full project support (in the works)Krasimir: full project support (in the works)

Page 53: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

ResultsResults

• Working Integration of Haskell to Working Integration of Haskell to Assignment ManagerAssignment Manager

• (Partial) Integration of Haskell to (Partial) Integration of Haskell to VS.NETVS.NET

• VS plugin available soonVS plugin available soon

Page 54: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Future WorkFuture Work

• Extend Integration of Haskell to Extend Integration of Haskell to VS.NET, through Better Project VS.NET, through Better Project support, Help, Module Browser etc.support, Help, Module Browser etc.

• design decisions on how to design decisions on how to integrate/expose existing compiler as integrate/expose existing compiler as an APIan API

• design decisions on how to integrate design decisions on how to integrate VS hooks into GHC parserVS hooks into GHC parser

• Haskell compilation and interop with Haskell compilation and interop with CLR/VS.NET: CLR/VS.NET: Integrating Haskell to .NET using RotorIntegrating Haskell to .NET using Rotor

Page 55: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Project MembersProject Members• VHS-AM TeamVHS-AM Team

– André SantosAndré Santos– André FurtadoAndré Furtado– Mauro AraújoMauro Araújo– Marden MenezesMarden Menezes

• VHS ProjectVHS Project– Simon Marlow, MSRSimon Marlow, MSR– Krasimir AngelovKrasimir Angelov– The VHS-AM TeamThe VHS-AM Team

Page 56: © VHS/VHS-AM Team Integrating Haskell with Visual Studio Assignment Manager André Santos & VHS/VHS-AM Team alms@cin.ufpe.br

© VHS/VHS-AM Team

Integrating Haskell with Visual Integrating Haskell with Visual Studio Assignment ManagerStudio Assignment Manager

Questions?Questions?

www.cin.ufpe.br/~haskell/vhs-amwww.cin.ufpe.br/~haskell/vhs-am