Mark B. Shields
Microsoft
Network
Latest external collaboration on country level. Dive into details by clicking on the dots.
Publication
Featured researches published by Mark B. Shields.
Journal of Functional Programming | 2007
Simon L. Peyton Jones; Dimitrios Vytiniotis; Stephanie Weirich; Mark B. Shields
Haskells popularity has driven the need for ever more expressive type system features, most of which threaten the decidability and practicality of Damas-Milner type inference. One such feature is the ability to write functions with higher-rank types – that is, functions that take polymorphic functions as their arguments. Complete type inference is known to be undecidable for higher-rank (impredicative) type systems, but in practice programmers are more than willing to add type annotations to guide the type inference engine, and to document their code. However, the choice of just what annotations are required, and what changes are required in the type system and its inference algorithm, has been an ongoing topic of research. We take as our starting point a
symposium on principles of programming languages | 2000
Jeffrey R. Lewis; John Launchbury; Erik Meijer; Mark B. Shields
\lambda
symposium on principles of programming languages | 1998
Simon L. Peyton Jones; Mark B. Shields; John Launchbury; Andrew Tolmach
-calculus proposed by Odersky and Laufer. Their system supports arbitrary-rank polymorphism through the exploitation of type annotations on
Electronic Notes in Theoretical Computer Science | 2001
Mark B. Shields; Simon L. Peyton Jones
\lambda
Archive | 2000
Erik Meijer; Mark B. Shields
-bound arguments and arbitrary sub-terms. Though elegant, and more convenient than some other proposals, Odersky and Laufers system requires many annotations. We show how to use local type inference (invented by Pierce and Turner) to greatly reduce the annotation burden, to the point where higher-rank types become eminently usable. Higher-rank types have a very modest impact on type inference. We substantiate this claim in a very concrete way, by presenting a complete type-inference engine, written in Haskell, for a traditional Damas-Milner type system, and then showing how to extend it for higher-rank types. We write the type-inference engine using a monadic framework: it turns out to be a particularly compelling example of monads in action. The paper is long, but is strongly tutorial in style. Although we use Haskell as our example source language, and our implementation language, much of our work is directly applicable to any ML-like functional language.
symposium on principles of programming languages | 2001
Mark B. Shields; Erik Meijer
This paper introduces a language feature, called implicit parameters, that provides dynamically scoped variables within a statically-typed Hindley-Milner framework. Implicit parameters are lexically distinct from regular identifiers, and are bound by a special with construct whose scope is dynamic, rather than static as with let. Implicit parameters are treated by the type system as parameters that are not explicitly declared, but are inferred from their use. We present implicit parameters within a small call-by-name λ-calculus. We give a type system, a type inference algorithm, and several semantics. We also explore implicit parameters in the wider settings of call-by-need languages with overloading, and call-by-value languages with effects. As a witness to the former, we have implemented implicit parameters as an extension of Haskell within the Hugs interpreter, which we use to present several motivating examples.
international conference on functional programming | 2002
Simon L. Peyton Jones; Mark B. Shields
Compilers for ML and Haskell use intermediate languages that incorporate deeply-embedded assumptions about order of evaluation and side effects. We propose an intermediate language into which one can compile both ML and Haskell, thereby facilitating the sharing of ideas and infrastructure, and supporting language developments that move each language in the direction of the other. Achieving this goal without compromising the ability to Compile as good code as a more direct route turned out to be much more subtle than we expected. We address this challenge using monads and unpointed types, identify two alternative language designs, and explore the choices they embody.
Archive | 2007
Henricus Johannes Maria Meijer; Brian C. Beckman; Christopher W. Brumme; Mark B. Shields; Wei Zhu
Haskell has a sophisticated mechanism for overloading identiflers with multiple deflnitions 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 deflciency becomes particularly tiresome when Haskell programs wish to call methods imported from an object-oriented library. We present two reflnements of Haskell’s type class system: Closed classes and overlapping instances. We demonstrate how we may exploit the reflned 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.
Theoretical Computer Science | 2001
Mark B. Shields; Simon Peyton-Jones
Archive | 2007
Henricus Johannes Maria Meijer; Mark B. Shields; Soumitra Sengupta