Results 1 -
9 of
9
Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell
- Engineering theories of software construction
, 2001
"... Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages. These lecture notes give an overview of the techniques that have been developed by th ..."
Abstract
-
Cited by 88 (2 self)
- Add to MetaCart
Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages. These lecture notes give an overview of the techniques that have been developed by the Haskell community to address these problems. I introduce various proposed extensions to Haskell along the way, and I offer an operational semantics that explains what these extensions mean. This tutorial was given at the Marktoberdorf Summer School 2000. It will appears in the book “Engineering theories of software construction, Marktoberdorf Summer School 2000”, ed CAR Hoare, M Broy, and R Steinbrueggen, NATO ASI Series, IOS Press, 2001, pp47-96. This version has a few errors corrected compared with the published version. Change summary: Apr 2005: some examples added to Section 5.2.2, to clarifyevaluate. March 2002: substantial revision 1
Calling Hell From Heaven and Heaven From Hell
- In Proceedings of the Fourth ACM SIGPLAN International Conference on Functional Programming
, 1999
"... The increasing popularity of component-based programming tools offer a big opportunity to designers of advanced programming languages, such as Haskell. If we can package our programs as COM objects, then it is easy to integrate them into applications written in other languages. In earlier work we de ..."
Abstract
-
Cited by 56 (6 self)
- Add to MetaCart
The increasing popularity of component-based programming tools offer a big opportunity to designers of advanced programming languages, such as Haskell. If we can package our programs as COM objects, then it is easy to integrate them into applications written in other languages. In earlier work we described a preliminary integration of Haskell with Microsoft's Component Object Model (COM), focusing on how Haskell can create and invoke COM objects. This paper develops that work, concentrating on the mechanisms that support externally-callable Haskell functions, and the encapsulation of a Haskell program as a COM object. 1 Introduction "Component-based programming" is all the rage. It has come to mean an approach to software construction in which a program is an assembly software components, perhaps written in different languages, glued together by some common substrate [16]. The most widely used substrates are Microsoft's Component Object Model (COM), and the Common Object Request Broke...
Transformation: The Missing Link of MDA
, 2002
"... In this paper we explore the issue of transforming models to models, an essential part of the OMG`s Model Driven Architecture (MDA) vision. Drawing from the literature and our experiences implementing a number of transformations using different technologies, we explore the strengths and weaknesse ..."
Abstract
-
Cited by 39 (4 self)
- Add to MetaCart
In this paper we explore the issue of transforming models to models, an essential part of the OMG`s Model Driven Architecture (MDA) vision. Drawing from the literature and our experiences implementing a number of transformations using different technologies, we explore the strengths and weaknesses of the different technologies and identify requirements for a transformation language for performing the kind of model-to-model transformations required to realise the MDA vision.
Interlanguage Working Without Tears: Blending SML with Java
- In ACM SIGPLAN International Conference on Functional Programming (ICFP
, 1999
"... A good foreign-language interface is crucial for the success of any modern programming language implementation. Although all serious compilers for functional languages have some facility for interlanguage working, these are often limited and awkward to use. This article describes the features for b ..."
Abstract
-
Cited by 30 (3 self)
- Add to MetaCart
A good foreign-language interface is crucial for the success of any modern programming language implementation. Although all serious compilers for functional languages have some facility for interlanguage working, these are often limited and awkward to use. This article describes the features for bidirectional interlanguage working with Java that are built into the latest version of the MLj compiler. Because the MLj foreign interface is to another high-level typed language which shares a garbage collector with compiled ML code, and because we are willing to extend the ML language, we are able to provide unusually powerful, safe and easy to use interlanguage working features. Indeed, rather then being a traditional foreign interface, our language extensions are more a partial integration of Java features into SML. We describe this integration of Standard ML and Java, first informally with example program fragments, and then formally in the notation used by The Definition of Standard M...
Object-oriented style overloading for Haskell
- In First Workshop on Multi-language Infrastructure and Interoperability (BABEL '01
, 2001
"... Haskell has a sophisticated mechanism for overloading identifiers with multiple definitions at distinct types. Object-oriented programming has a similar notion of overriding and overloading for methods names. Unfortunately, it is not possible to encode object-oriented overloading directly using Hask ..."
Abstract
-
Cited by 13 (3 self)
- Add to MetaCart
Haskell has a sophisticated mechanism for overloading identifiers with multiple definitions at distinct types. Object-oriented programming has a similar notion of overriding and overloading for methods names. Unfortunately, it is not possible to encode object-oriented overloading directly using Haskell overloading. This deficiency becomes particularly tiresome when Haskell programs wish to call methods imported from an object-oriented library. We present two refinements of Haskell’s type class system: Closed classes and overlapping instances. We demonstrate how we may exploit the refined system so as to be able to encode object-oriented classes within Haskell. This encoding allows us to mimic, within Haskell, the overloading resolution rules employed by object-oriented languages without the need for additional type annotations or name mangling. As a consequence, object-oriented class libraries are very convenient to import and use within Haskell. 1 The problem The purpose of this paper is to make it easy to import libraries from Java[9] or.NET[18], into a Haskell program. By “easy ” we mean that it should be as easy to use the library from Haskell than from its native language. Indeed, Haskell’s higher order features and first-class monadic values make it a powerful glue language, so if we succeed it might even be easier to use the library from Haskell than from its native language. However, these advantages will not be persuasive if things that are easy in the native language are clumsy in Haskell. That is the challenge we address here.
MysterX: A Scheme Toolkit for Building Interactive Applications with COM
- In Technology of Object-Oriented Languages and Systems (TOOL
, 1999
"... MysterX is an object-oriented Scheme toolkit for building applications from off-the-shelf COM components. While the COM support in languages such as Haskell and Mercury requires the use of an interface compiler to generate stub code, MysterX uses the reflective capabilities of OLE Automation to make ..."
Abstract
-
Cited by 6 (1 self)
- Add to MetaCart
MysterX is an object-oriented Scheme toolkit for building applications from off-the-shelf COM components. While the COM support in languages such as Haskell and Mercury requires the use of an interface compiler to generate stub code, MysterX uses the reflective capabilities of OLE Automation to make value-marshalling decisions at run-time. MysterX hosts COM components in windows that display Dynamic HTML, without requiring a separate browser. Scheme code can manipulate HTML elements and their style properties in such windows to create interesting visual effects. Event handlers written in Scheme can be associated with HTML elements and COM objects. By integrating these diverse technologies, MysterX can be used to write complete GUI applications. 1: Introduction MysterX is an object-oriented Scheme toolkit for building interactive applications with components that adhere to the Component Object Model (COM). COM allows applications to be built from off-the-shelf components. Components an...
Expressive Type Systems for Logic Programming Languages
, 2002
"... The aim of this thesis is the design of a type system for an industrial strength logic programming language. The type system we describe has been implemented for the Mercury programming language, in the Melbourne Mercury compiler. ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
The aim of this thesis is the design of a type system for an industrial strength logic programming language. The type system we describe has been implemented for the Mercury programming language, in the Melbourne Mercury compiler.
Object-Oriented Style Overloading for Haskell (Extended Abstract)
, 2001
"... Haskell has a sophisticated mechanism for overloading identifiers with multiple de nitions at distinct types. Object-oriented programming has a similar notion of overriding and overloading for methods names. Unfortunately, it is not possible to encode object-oriented overloading directly using Haske ..."
Abstract
- Add to MetaCart
Haskell has a sophisticated mechanism for overloading identifiers with multiple de nitions at distinct types. Object-oriented programming has a similar notion of overriding and overloading for methods names. Unfortunately, it is not possible to encode object-oriented overloading directly using Haskell overloading. This deficiency becomes particularly tiresome when Haskell programs wish to call methods imported from an object-oriented library. We present two refinements of Haskell's type class system: Closed classes and overlapping instances. We demonstrate how we may exploit the refined system so as to be able to encode object-oriented classes within Haskell. This encoding allows us to mimic, within Haskell, the overloading resolution rules employed by object-oriented languages without the need for additional type annotations or name mangling. As a consequence,...
unknown title
, 2009
"... Abstract Functional programming may be beautiful, but to write real applications we must grapple with awk-ward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages.These lecture notes give an overview of the techniques that have been develo ..."
Abstract
- Add to MetaCart
Abstract Functional programming may be beautiful, but to write real applications we must grapple with awk-ward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages.These lecture notes give an overview of the techniques that have been developed by the Haskell community to address these problems. I introduce various proposed extensions to Haskell along the way,and I offer an operational semantics that explains what these extensions mean. This tutorial was given at the Marktoberdorf Summer School 2000. It will appears in the book"Engineering theories of software construction, Marktoberdorf Summer School 2000", ed CAR Hoare, M Broy, and R Steinbrueggen, NATO ASI Series, IOS Press, 2001, pp47-96.This version has a few errors corrected compared with the published version. Change summary: * Jan 2009: Clarify * and fn () in Section 3.5; reword the one occurrence of fv () in Section 2.7*

