Skip to main content

Johan Jeuring

  • I work on: software technology for learning and teaching, Artificial intelligence in education, Intelligent tutoring systems, tutors for programming and mathematicsedit
Generic programs are programs that abstract over types. Generic programs can be used to address several common programming patterns. This paper discusses why generic programming is useful, gives applications of generic programming, and... more
Generic programs are programs that abstract over types. Generic programs can be used to address several common programming patterns. This paper discusses why generic programming is useful, gives applications of generic programming, and discusses the history of generic programming and current generic programming activities at Utrecht University.
Change is endemic to any large software system. Business, technology, and organization usually frequently change in the life cycle of a software system. However, changing a large software system is difficult: localizing the code that is... more
Change is endemic to any large software system. Business, technology, and organization usually frequently change in the life cycle of a software system. However, changing a large software system is difficult: localizing the code that is responsible for a particular part of the functionality of a system, changing it, and ensuring that the change does not lead to inconsistencies or other problems in other parts of the system or in the architecture or documentation is usually a challenging task. Software evolution is a fact of life in the ...
Research Interests:
Abstract At the Open University, The Netherlands, we are developing interactive exercise assistants that give good feedback to students trying to solve mathematical or logical exercises. To simplify installing, maintaining, and adapting... more
Abstract At the Open University, The Netherlands, we are developing interactive exercise assistants that give good feedback to students trying to solve mathematical or logical exercises. To simplify installing, maintaining, and adapting the tools, and to improve reporting facilities, we have turned our tools into web applications. Since our tools are implemented in Haskell, this implies that we have to be able to connect an interactive Haskell application to the web.
Abstract We are developing several exercise assistants which give very good feedback. To develop an exercise assistant, we need three components: a domain description, rules for reasoning about the domain, and one or more strategies for... more
Abstract We are developing several exercise assistants which give very good feedback. To develop an exercise assistant, we need three components: a domain description, rules for reasoning about the domain, and one or more strategies for solving the exercises in the domain. To support the possibility to adapt the several components, to avoid code duplication and maximize code reuse, we have developed a generic framework for developing exercise assistants.
Abstract At the Open University, The Netherlands, we are developing interactive Exercise Assistants that give good feedback to students trying to solve mathematical or logical exercises. To simplify installing, maintaining, and adapting... more
Abstract At the Open University, The Netherlands, we are developing interactive Exercise Assistants that give good feedback to students trying to solve mathematical or logical exercises. To simplify installing, maintaining, and adapting the tools, and to improve reporting facilities, we have turned our tools into web applications. Since our tools are implemented in Haskell, this implies that we have to be able to connect an interactive Haskell application to the web.
IFIP-The International Federation for Information Processing IFIP was founded in 1960 under the auspices of UNESCO, following the First World Computer Congress held in Paris the previous year. An umbrella organization for societies... more
IFIP-The International Federation for Information Processing IFIP was founded in 1960 under the auspices of UNESCO, following the First World Computer Congress held in Paris the previous year. An umbrella organization for societies working in information processing, IFIP's aim ...
Learning to program is difficult. To support learning programming, many intelligent tutoring systems for learning programming have been developed. Research has shown that such tutors have positive effects on learning. However, intelligent... more
Learning to program is difficult. To support learning programming, many intelligent tutoring systems for learning programming have been developed. Research has shown that such tutors have positive effects on learning. However, intelligent tutors for learning programming are not widely used. Building an intelligent tutor for a programming language is a substantial amount of work, and utilising it in a course
IFIP-The International Federation for Information Processing IFIP was founded in 1960 under the auspices of UNESCO, following the First World Computer Congress held in Paris the previous year. An umbrella organization for societies... more
IFIP-The International Federation for Information Processing IFIP was founded in 1960 under the auspices of UNESCO, following the First World Computer Congress held in Paris the previous year. An umbrella organization for societies working in information processing, IFIP's aim ...
Programs in languages such as Haskell are often datatype- centric and make extensive use of folds on that datatype. Incremen- talization of such a program can signicantly improve its performance by transforming monolithic atomic folds... more
Programs in languages such as Haskell are often datatype- centric and make extensive use of folds on that datatype. Incremen- talization of such a program can signicantly improve its performance by transforming monolithic atomic folds into incremental computations. Functional incrementalization separates the recursion from the applica- tion of the algebra in order to reduce redundant computations and reuse intermediate results. In this paper, we motivate incrementalization with a simple example and present a library for transforming programs using upwards, downwards, and circular incrementalization. Our benchmarks show that incrementalized computations using the library are nearly as fast as handwritten atomic functions.
This report contains the papers selected for presentation at the 2nd Workshop on Generic Programming (WGP2000), which was held on July 6, 2000 in Ponte de Lima, Portugal. Generic programming is about making programs more adaptable by... more
This report contains the papers selected for presentation at the 2nd Workshop on Generic Programming (WGP2000), which was held on July 6, 2000 in Ponte de Lima, Portugal. Generic programming is about making programs more adaptable by making them more general. Generic programs often embody non-traditional kinds of polymorphism; ordinary programs are obtained from them by suitably instantiating their parameters. In contrast with normal programs, the parameters of a generic program are often quite rich in structure. For ...
This tutorial book presents six carefully revised lectures given at the Spring School on Datatype-Generic Programming, SSDGP 2006. This was held in Nottingham, UK, in April 2006. It was colocated with the Symposium on Trends in Functional... more
This tutorial book presents six carefully revised lectures given at the Spring School on Datatype-Generic Programming, SSDGP 2006. This was held in Nottingham, UK, in April 2006. It was colocated with the Symposium on Trends in Functional Programming (TFP 2006), and the Conference of the Types Project (TYPES 2006). All the lectures have been subjected to thorough internal review by the editors and contributors, supported by independent external reviews.
��� Both text input as well as structure edit operations, without mode switching. For example, typing 2+ 3* 8 has the same effect as constructing this expression via selecting+,*, and the appropriate integers. It is not clear to us (yet)... more
��� Both text input as well as structure edit operations, without mode switching. For example, typing 2+ 3* 8 has the same effect as constructing this expression via selecting+,*, and the appropriate integers. It is not clear to us (yet) how to textually input two-dimensional formulae.��� Easy drag and drop of subexpressions.
A polytypic program is a program that behaves uniformly over a large class of datatypes. For functional polytypic programming this uniformity is achieved by parameterizing functions over type constructors to obtain polytypic functions. A... more
A polytypic program is a program that behaves uniformly over a large class of datatypes. For functional polytypic programming this uniformity is achieved by parameterizing functions over type constructors to obtain polytypic functions. A polytypic function is defined either by induction on the structure of regular type constructors or in terms of other polytypic functions. PolyP is an extension of the functional programming language Haskell with a construct for defining polytypic functions. PolyP is a type guided preprocessor that generates instances ...
Abstract This course is being assessed by an unusual form of examination: a practical exercise. The object of the exercise is to show that you have learned to use lazy functional programming as a practical programming tool. The exercise... more
Abstract This course is being assessed by an unusual form of examination: a practical exercise. The object of the exercise is to show that you have learned to use lazy functional programming as a practical programming tool. The exercise is deliberately open-ended, in order to form a good basis for

And 199 more