The FunGEn package

[Tags: bsd3, library, program]

A lightweight, cross-platform, OpenGL/GLUT-based game engine

[Skip to ReadMe]


Versions0.1, 0.3, 0.4, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6,
Change logNone available
Dependenciesbase (==4.*), GLUT, OpenGL, random [details]
Copyright(C) 2002 Andre Furtado <>
AuthorAndre Furtado <>
MaintainerSimon Michael <>
Home page
UploadedThu Aug 8 00:35:29 UTC 2013 by SimonMichael
Downloads1907 total (88 in last 30 days)
0 []
StatusDocs uploaded by user
Build status unknown [no reports yet]




Maintainers' corner

For package maintainers and hackage trustees

Readme for FunGEn-0.4.2

<style> .a { font-weight:bold; color:red; font-size:200%; } .b { font-weight:normal; color:#bbb; font-size:smaller; } </style>

<span class="a">Fun<span class="b">ctional</span> G<span class="b">ame</span> En<span class="b">gine</span></span>

FunGEn (Functional Game Engine) is a BSD-licensed, cross-platform, OpenGL/GLUT-based, imperative game engine/framework written in Haskell. With very few dependencies and two example games, it's one of the easiest ways to get started with game development in Haskell.

<img src="pong.png" title="An example pong game" style="float:right; margin:1em;">

FunGEn, created by Andre Furtado, is intended to help game programmers make games in a faster and more automated way. It supports:

Docs: 0.4 API docs, 0.1 intro docs <!-- Another version of the [pong tutorial](TUTORIAL.html), --> <!-- the [old site](, -->
Discussion & help: #haskell-game IRC channel, haskell-cafe mail list \

Getting started

<img src="worms.png" title="An example snake game" style="float:right; margin:1em;">

Install from hackage:

$ cabal update
$ cabal install FunGEn

Or, install source and run the examples:

$ darcs get
$ cd fungen
$ cabal install
$ (cd examples; ghc helloworld; ./helloworld)
$ (cd examples/pong; ghc pong; ./pong)
$ (cd examples/worms; ghc worms; ./worms)

Contribute patches:

I (Simon Michael) maintain FunGEn sporadically. If you'd like to take it and run with it, or co-maintain, let's chat! I'm sm on the #haskell-game IRC channel.


What is a game engine?

A game engine can be considered as a library that provides game facilities to a game programmer. When using a game engine, the programmer must specify when the game events happen, rather than how they are implemented. A same functionality may have its implementation varying from platform to platform, in the case the engine is platform-independent. The main advantage of a game engine is that it can be reused to the development of many different kind of games, in an automated way, saving a lot of programming time.

Why Haskell?

We believe that Haskell is a great language to develop games, because of its high level of abstraction and the generation of a more concise, elegant and shorter code. This is great for code maintenance and understanding. Combining the power of Haskell with the facilities provided by game engines seems a promising project. You can find more info on Haskell in its official site.

What is HOpenGL?

HOpenGL stands for Haskell Open Graphics Library. Actually, it is a binding to one of the most famous graphics libraries around the world (OpenGL) and its auxiliary toolkit (GLUT). In other words, it makes possible to call OpenGL/GLUT routines (which were written in the C language) when programming in Haskell. You can find more info on HOpenGL in my HOpenGL Tutorial site, or in its official site.

Release notes

0.4.2 (2013/08/07)

0.4.1 (2013/08/06)

0.4 (2013/08/05)

0.3 (2011/02/13)

GHC 6.12-compatible 0.3 released on darcsden & hackage by Simon Michael:

0.1-hackage (2008/09/17)

GHC 6.10-compatible 0.1 released on hackage by Miloslav Raus:

GHC 6.8 update (2008/02/26)

GHC 6.8-compatible update by Simon Michael:

0.1 (2002)

First public release by Andre Furtado:


Andre's 2002 todo list:

Here you have a list of some upcoming FunGEn features, and some other desired features (but with no implementation prevision yet).

Would you like to suggest a feature? Feel free to do it. Would you like to implement a feature? Please do it! Keep in touch.


Andre's 2002 credits:

FunGEn was created by Andre Furtado, Computation Science graduation student at the Informatics Center (CIn) of the Federal University of Pernambuco (UFPE), as part of a Scientific Iniciation (PIBIC/CNPq) research project (Creating a Game Platform Using Haskell), oriented by lecturer Andre Santos (PhD, 1995, University of Glasgow), who was responsible for figuring out a lot of FunGEn implementation details.

I would like to thank also the following people who contributed for the development of FunGEn:

FunGEn can be distributed freely, in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I would thank you if you cite my name and this site if you are going to use FunGEn for other things besides home programming.