https://wiki.haskell.org/api.php?action=feedcontributions&user=Mikolaj&feedformat=atomHaskellWiki - User contributions [en]2024-03-29T14:07:56ZUser contributionsMediaWiki 1.35.5https://wiki.haskell.org/index.php?title=Game_Development&diff=64894Game Development2021-12-15T10:10:15Z<p>Mikolaj: Warn the wiki page is not up to date</p>
<hr />
<div>[[Category:Games]] [[Category:Community]]<br />
<br />
In recent years this page has not been updated often enough to remain informative, so it probably has only a historical value at this point.<br />
<br />
As of 2021, the following forums seem the most active, so please ask there for up-to-date information: <br />
<br />
* [irc://irc.libera.chat/#haskell-game #haskell-game] IRC channel mirrored as [https://matrix.to/#/#haskell-game:matrix.org #haskell-game] room in Matrix<br />
<br />
* [https://discord.gg/87Ghnws the Discord Haskell GameDev server]<br />
<br />
More links below, but some may be defunct or dormant. A slightly edited original old version of the wiki page follows.<br />
<br />
-------------------------------------<br />
<br />
There are quite a lot of games, unfinished libraries, and interested people out there - please enjoy the links here and join us on IRC, Matrix, Discord, Reddit and elsewhere for news!<br />
<br />
<br />
== Games and game engines ==<br />
<br />
* [[Applications and libraries/Games]] lists [[Applications and libraries/Games#Games|games]] and [[Applications and libraries/Games#Game_Engines_and_Libraries|game engines/libs]]<br />
<br />
* See also Hackage categories: [http://hackage.haskell.org/packages/#cat:Game Game], [http://hackage.haskell.org/packages/#cat:Game%20Engine Game Engine], [http://hackage.haskell.org/packages/#cat:Graphics Graphics], [http://hackage.haskell.org/packages/#cat:Sound Sound], [http://hackage.haskell.org/packages/#cat:Physics Physics], [http://hackage.haskell.org/packages/#cat:FRP FRP]<br />
<br />
* Other game-related wiki pages: [[:category:Games]]<br />
<br />
<br />
=== Other supporting software ===<br />
<br />
* [http://hackage.haskell.org/package/grid grid] provides tools for working with regular arrangements of tiles, such as might be used in a board game or self-organising map (SOM). Grid currently supports triangular, square, and hexagonal tiles, with various 2D and toroidal layouts ([https://github.com/mhwombat/grid/wiki description]).<br />
<br />
<br />
== Articles and blog posts ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://blog.haskellformac.com/blog/writing-games-in-haskell-with-spritekit Writing Games in Haskell with SpriteKit]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2015/09/skeletal-animation-for-games-in-haskell.html Skeletal animation for games in Haskell]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2014/03/experimenting-with-game-engine-concepts.html Experimenting with game engine concepts in Haskell]<br />
<br />
* [http://fho.f12n.de/posts/2014-10-25-easily-extensible-entity-enigma.html The easily extensible entity enigma]<br />
<br />
* [http://www.gamedev.net/page/resources/_/technical/game-programming/haskell-game-object-design-or-how-functions-can-get-you-apples-r3204 Haskell Game Object Design - Or How Functions Can Get You Apples]<br />
<br />
* [http://keera.co.uk/blog/2014/10/15/from-60-fps-to-500/ From 60 Frames per Second to 500 in Haskell]<br />
<br />
* [http://www.reddit.com/r/haskell/comments/2f9w0p/is_it_practical_to_write_a_strong_chess_engine_in/ Is it practical to write a strong chess engine in Haskell?]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-01-getting-started-with-netwire-and-sdl.html Getting Started with Netwire and SDL]<br />
<br />
* [https://github.com/alexander-b/master-thesis The Quest for Programming Nirvana: On Programming Game Systems in Haskell]; a Master Thesis on programming game systems in Haskell<br />
<br />
* [http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf Functional Programming and 3D Games] (thesis, PDF)<br />
<br />
* [http://blog.chucklefish.org/?p=154 Wayward Tide: Technical Info]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-18-asteroids-in-netwire.html Asteroids & Netwire]<br />
<br />
* [http://jshaskell.blogspot.nl/2012/09/breakout.html Writing JavaScript games in Haskell - Breakout]<br />
<br />
* [https://github.com/leonidas/codeblog/blob/master/2012/2012-01-17-declarative-game-logic-afrp.md Purely Functional, Declarative Game Logic Using Reactive Programming]<br />
<br />
* [http://folk.uio.no/carljsv/computergames/computergames.pdf Computer Games'] - trying to implement the game flow of a computer game<br />
<br />
* [http://lambda-the-ultimate.org/node/1277 The Next Mainstream Programming Languages: A Game Developer's Perspective] (PPT, PDF) presentation by Tim Sweeney<br />
<br />
* [http://prog21.dadgum.com/23.html Purely Functional Retrogames]<br />
<br />
* [http://prog21.dadgum.com/36.html Accidentally Introducing Side Effects into Purely Functional Code]<br />
<br />
* [[media:wxhaskell.pdf | wxHaskell - A Portable and Concise GUI Library for Haskell]] (PDF) - describes an implementation of an asteroids game, [[wxAsteroids]]<br />
<br />
* [http://www.palgorithm.co.uk/2009/08/haskell-for-games/ Haskell for Games!] Blog post, with PDF slides from AngloHaskell talk.<br />
<br />
* [http://www.gamasutra.com/view/feature/2985/postmortem_naughty_dogs_jak_and_.php Postmortem: Naughty Dog's Jak and Daxter: the Precursor Legacy]; an article about a game developed with a [http://en.wikipedia.org/wiki/Domain-specific_language DSL] compiler written in Lisp<br />
<br />
* [http://lambdor.net/ Lambdor] blog mostly about Yampa FRP and game development in Haskell with some tutorials<br />
<br />
* [http://jshaskell.blogspot.de/ Writing JavaScript games in Haskell]<br />
<br />
* [http://lambdacube3d.wordpress.com/ LambdaCube 3D] is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
* [http://morgenthum.dev/articles/write-haskell-game How to write a game in Haskell from scratch]<br />
<br />
== Videos ==<br />
<br />
* [https://www.youtube.com/watch?v=9dk7_GDNocQ Playing with Graphics and Animations in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=AJQZg3Po-Ag bloxors: an OpenGL Logic Game written in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=XoE5CKLLnaM LambdaCube 3D - Stunts example]<br />
<br />
* [http://www.youtube.com/watch?v=JleoASegUlk LambdaCube 3D - Quake 3 example]<br />
<br />
* [https://www.youtube.com/watch?v=1MNTerD8IuI Writing a game in Haskell]<br />
<br />
== Examples ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://folk.uio.no/carljsv/gorillabas/ GorillaBAS] - this was an attempt on defining computer games, and build such a thing.<br />
<br />
* https://github.com/mlesniak/game - Haskell/OpenGL/Chipmunk game prototypes<br />
<br />
* [[wxAsteroids]], a well-documented game, based on [[wxHaskell]]<br />
<br />
* [https://github.com/simonmichael/hssdl-mac-example hssdl-mac-example] - how to make an SDL-using package buildable on mac OSX<br />
<br />
* http://codepad.org/LRGEkkDp - initialization for SDL to start rendering OpenGL stuff<br />
<br />
* http://hackage.haskell.org/package/stunts - A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
* http://hackage.haskell.org/package/dow - Dungeons of Wor is an homage to the classic arcade game, Wizard of Wor. This game is also an experiment in functional reactive programming, so it might be a useful resource to anyone interested in this topic.<br />
<br />
* [https://github.com/sseefried/open-epidemic-game Epidemic]: a small game for Android devices. As an added bonus a complete development environment for the game can be built with Docker using the [https://github.com/sseefried/docker-epidemic-build-env.git docker-epidemic-build-env] repo.<br />
<br />
* [https://github.com/ivanperez-keera/haskanoid haskanoid]: a well-documented breakout clone with SDL graphics and Kinect and Wiimote support. Written in FRP, there's a fork in Haskell for Android.<br />
<br />
* Possible Hackage categorisation guidelines: upload games to Game, engines and libs to Game Engine, or at least to some category beginning with Game, and check latest categories before uploading<br />
<br />
== Forums ==<br />
<br />
There are several forums in the Haskell world where game development can be discussed:<br />
* The [https://www.haskell.org/mailman/listinfo/haskell-cafe Haskell Café] mailing list<br />
<br />
* This page<br />
<br />
* [irc://irc.libera.chat/#haskell-game #haskell-game] ([[IRC]])<br />
<br />
* [http://www.haskellers.com/teams/7 Special Interest Groups » Games] at Haskeller.com<br />
<br />
* [https://github.com/haskell-game/brainstorming haskell-game] at GitHub<br />
<br />
* [http://www.reddit.com/r/haskellgamedev Haskell Game Development] at reddit<br />
<br />
As of 2021, the most up-to-date collection of Haskell gaming links seems to be at https://haskell-game.dev/. Searching Hackage, Stackage, github, gitlab, etc., is bound to return many up-to-date results as well.<br />
<br />
The GitHub page [https://github.com/Calinou/awesome-gamedev awesome-gamedev] contains a list of general forums for game development, as well as lists of tools, utilities, libraries (some in Haskell) and learning resources.<br />
<br />
== Wishlist ==<br />
<br />
Is Hackage missing a useful data structure or library for some functionality that would benefit game programming? Suggestions for useful things can be added here as potential projects to hack on.<br />
<br />
* [https://hackage.haskell.org/package/Octree Octtree], [http://hackage.haskell.org/package/KdTree kd]-[http://hackage.haskell.org/package/kd-tree tree], various space partitioning techniques (maybe start with [http://hackage.haskell.org/package/spacepart spacepart]).<br />
<br />
* Binding to [http://www.fmod.org fmod]<br />
<br />
* Binding to [http://enet.bespin.org/Features.html enet] for multiplayer games. (jeffz is working on this).</div>Mikolajhttps://wiki.haskell.org/index.php?title=Game_Development&diff=64893Game Development2021-12-15T09:54:10Z<p>Mikolaj: update freenode IRC link to libera link</p>
<hr />
<div>[[Category:Games]] [[Category:Community]]<br />
<br />
This page and the #haskell-game [[IRC channel]] are the starting points for everyone interested in doing game development with Haskell. You may also wish to join the [http://www.haskellers.com/teams/7 Games group] on haskellers.com, [http://www.reddit.com/r/haskellgamedev the Haskell game development subreddit] or [https://discord.gg/87Ghnws the Discord Haskell GameDev server].<br />
<br />
There are quite a lot of games, unfinished libraries, and interested people out there - please gather links here and join us on IRC, Matrix, Discord, Reddit and elsewhere!<br />
<br />
<br />
== Games and game engines ==<br />
<br />
* [[Applications and libraries/Games]] lists [[Applications and libraries/Games#Games|games]] and [[Applications and libraries/Games#Game_Engines_and_Libraries|game engines/libs]]<br />
<br />
* See also Hackage categories: [http://hackage.haskell.org/packages/#cat:Game Game], [http://hackage.haskell.org/packages/#cat:Game%20Engine Game Engine], [http://hackage.haskell.org/packages/#cat:Graphics Graphics], [http://hackage.haskell.org/packages/#cat:Sound Sound], [http://hackage.haskell.org/packages/#cat:Physics Physics], [http://hackage.haskell.org/packages/#cat:FRP FRP]<br />
<br />
* Other game-related wiki pages: [[:category:Games]]<br />
<br />
<br />
=== Other supporting software ===<br />
<br />
* [http://hackage.haskell.org/package/grid grid] provides tools for working with regular arrangements of tiles, such as might be used in a board game or self-organising map (SOM). Grid currently supports triangular, square, and hexagonal tiles, with various 2D and toroidal layouts ([https://github.com/mhwombat/grid/wiki description]).<br />
<br />
<br />
== Articles and blog posts ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://blog.haskellformac.com/blog/writing-games-in-haskell-with-spritekit Writing Games in Haskell with SpriteKit]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2015/09/skeletal-animation-for-games-in-haskell.html Skeletal animation for games in Haskell]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2014/03/experimenting-with-game-engine-concepts.html Experimenting with game engine concepts in Haskell]<br />
<br />
* [http://fho.f12n.de/posts/2014-10-25-easily-extensible-entity-enigma.html The easily extensible entity enigma]<br />
<br />
* [http://www.gamedev.net/page/resources/_/technical/game-programming/haskell-game-object-design-or-how-functions-can-get-you-apples-r3204 Haskell Game Object Design - Or How Functions Can Get You Apples]<br />
<br />
* [http://keera.co.uk/blog/2014/10/15/from-60-fps-to-500/ From 60 Frames per Second to 500 in Haskell]<br />
<br />
* [http://www.reddit.com/r/haskell/comments/2f9w0p/is_it_practical_to_write_a_strong_chess_engine_in/ Is it practical to write a strong chess engine in Haskell?]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-01-getting-started-with-netwire-and-sdl.html Getting Started with Netwire and SDL]<br />
<br />
* [https://github.com/alexander-b/master-thesis The Quest for Programming Nirvana: On Programming Game Systems in Haskell]; a Master Thesis on programming game systems in Haskell<br />
<br />
* [http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf Functional Programming and 3D Games] (thesis, PDF)<br />
<br />
* [http://blog.chucklefish.org/?p=154 Wayward Tide: Technical Info]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-18-asteroids-in-netwire.html Asteroids & Netwire]<br />
<br />
* [http://jshaskell.blogspot.nl/2012/09/breakout.html Writing JavaScript games in Haskell - Breakout]<br />
<br />
* [https://github.com/leonidas/codeblog/blob/master/2012/2012-01-17-declarative-game-logic-afrp.md Purely Functional, Declarative Game Logic Using Reactive Programming]<br />
<br />
* [http://folk.uio.no/carljsv/computergames/computergames.pdf Computer Games'] - trying to implement the game flow of a computer game<br />
<br />
* [http://lambda-the-ultimate.org/node/1277 The Next Mainstream Programming Languages: A Game Developer's Perspective] (PPT, PDF) presentation by Tim Sweeney<br />
<br />
* [http://prog21.dadgum.com/23.html Purely Functional Retrogames]<br />
<br />
* [http://prog21.dadgum.com/36.html Accidentally Introducing Side Effects into Purely Functional Code]<br />
<br />
* [[media:wxhaskell.pdf | wxHaskell - A Portable and Concise GUI Library for Haskell]] (PDF) - describes an implementation of an asteroids game, [[wxAsteroids]]<br />
<br />
* [http://www.palgorithm.co.uk/2009/08/haskell-for-games/ Haskell for Games!] Blog post, with PDF slides from AngloHaskell talk.<br />
<br />
* [http://www.gamasutra.com/view/feature/2985/postmortem_naughty_dogs_jak_and_.php Postmortem: Naughty Dog's Jak and Daxter: the Precursor Legacy]; an article about a game developed with a [http://en.wikipedia.org/wiki/Domain-specific_language DSL] compiler written in Lisp<br />
<br />
* [http://lambdor.net/ Lambdor] blog mostly about Yampa FRP and game development in Haskell with some tutorials<br />
<br />
* [http://jshaskell.blogspot.de/ Writing JavaScript games in Haskell]<br />
<br />
* [http://lambdacube3d.wordpress.com/ LambdaCube 3D] is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
* [http://morgenthum.dev/articles/write-haskell-game How to write a game in Haskell from scratch]<br />
<br />
== Videos ==<br />
<br />
* [https://www.youtube.com/watch?v=9dk7_GDNocQ Playing with Graphics and Animations in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=AJQZg3Po-Ag bloxors: an OpenGL Logic Game written in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=XoE5CKLLnaM LambdaCube 3D - Stunts example]<br />
<br />
* [http://www.youtube.com/watch?v=JleoASegUlk LambdaCube 3D - Quake 3 example]<br />
<br />
* [https://www.youtube.com/watch?v=1MNTerD8IuI Writing a game in Haskell]<br />
<br />
== Examples ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://folk.uio.no/carljsv/gorillabas/ GorillaBAS] - this was an attempt on defining computer games, and build such a thing.<br />
<br />
* https://github.com/mlesniak/game - Haskell/OpenGL/Chipmunk game prototypes<br />
<br />
* [[wxAsteroids]], a well-documented game, based on [[wxHaskell]]<br />
<br />
* [https://github.com/simonmichael/hssdl-mac-example hssdl-mac-example] - how to make an SDL-using package buildable on mac OSX<br />
<br />
* http://codepad.org/LRGEkkDp - initialization for SDL to start rendering OpenGL stuff<br />
<br />
* http://hackage.haskell.org/package/stunts - A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
* http://hackage.haskell.org/package/dow - Dungeons of Wor is an homage to the classic arcade game, Wizard of Wor. This game is also an experiment in functional reactive programming, so it might be a useful resource to anyone interested in this topic.<br />
<br />
* [https://github.com/sseefried/open-epidemic-game Epidemic]: a small game for Android devices. As an added bonus a complete development environment for the game can be built with Docker using the [https://github.com/sseefried/docker-epidemic-build-env.git docker-epidemic-build-env] repo.<br />
<br />
* [https://github.com/ivanperez-keera/haskanoid haskanoid]: a well-documented breakout clone with SDL graphics and Kinect and Wiimote support. Written in FRP, there's a fork in Haskell for Android.<br />
<br />
* Possible Hackage categorisation guidelines: upload games to Game, engines and libs to Game Engine, or at least to some category beginning with Game, and check latest categories before uploading<br />
<br />
== Forums ==<br />
<br />
There are several forums in the Haskell world where game development can be discussed:<br />
* The [https://www.haskell.org/mailman/listinfo/haskell-cafe Haskell Café] mailing list<br />
<br />
* This page<br />
<br />
* [irc://irc.libera.chat/#haskell-game #haskell-game] ([[IRC]])<br />
<br />
* [http://www.haskellers.com/teams/7 Special Interest Groups » Games] at Haskeller.com<br />
<br />
* [https://github.com/haskell-game/brainstorming haskell-game] at GitHub<br />
<br />
* [http://www.reddit.com/r/haskellgamedev Haskell Game Development] at reddit<br />
<br />
The GitHub page [https://github.com/Calinou/awesome-gamedev awesome-gamedev] contains a list of general forums for game development, as well as lists of tools, utilities, libraries (some in Haskell) and learning resources.<br />
<br />
== Wishlist ==<br />
<br />
Is Hackage missing a useful data structure or library for some functionality that would benefit game programming? Suggestions for useful things can be added here as potential projects to hack on.<br />
<br />
* [https://hackage.haskell.org/package/Octree Octtree], [http://hackage.haskell.org/package/KdTree kd]-[http://hackage.haskell.org/package/kd-tree tree], various space partitioning techniques (maybe start with [http://hackage.haskell.org/package/spacepart spacepart]).<br />
<br />
* Binding to [http://www.fmod.org fmod]<br />
<br />
* Binding to [http://enet.bespin.org/Features.html enet] for multiplayer games. (jeffz is working on this).</div>Mikolajhttps://wiki.haskell.org/index.php?title=Game_Development&diff=63430Game Development2020-09-14T20:01:44Z<p>Mikolaj: Add a link to the Discord Haskell GameDev server</p>
<hr />
<div>[[Category:Games]] [[Category:Community]]<br />
<br />
This page and the #haskell-game [[IRC channel]] are the starting points for everyone interested in doing game development with Haskell. You may also wish to join the [http://www.haskellers.com/teams/7 Games group] on haskellers.com, [http://www.reddit.com/r/haskellgamedev the Haskell game development subreddit] or [https://discord.gg/87Ghnws the Discord Haskell GameDev server].<br />
<br />
There are quite a lot of games, unfinished libraries, and interested people out there - please gather links here and join us on '''[irc://irc.freenode.net/#haskell-game #haskell-game]''' !<br />
<br />
<br />
== Games and game engines ==<br />
<br />
* [[Applications and libraries/Games]] lists [[Applications and libraries/Games#Games|games]] and [[Applications and libraries/Games#Game_Engines_and_Libraries|game engines/libs]]<br />
<br />
* See also Hackage categories: [http://hackage.haskell.org/packages/#cat:Game Game], [http://hackage.haskell.org/packages/#cat:Game%20Engine Game Engine], [http://hackage.haskell.org/packages/#cat:Graphics Graphics], [http://hackage.haskell.org/packages/#cat:Sound Sound], [http://hackage.haskell.org/packages/#cat:Physics Physics], [http://hackage.haskell.org/packages/#cat:FRP FRP]<br />
<br />
* Other game-related wiki pages: [[:category:Games]]<br />
<br />
<br />
=== Other supporting software ===<br />
<br />
* [http://hackage.haskell.org/package/grid grid] provides tools for working with regular arrangements of tiles, such as might be used in a board game or self-organising map (SOM). Grid currently supports triangular, square, and hexagonal tiles, with various 2D and toroidal layouts ([https://github.com/mhwombat/grid/wiki description]).<br />
<br />
<br />
== Articles and blog posts ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://blog.haskellformac.com/blog/writing-games-in-haskell-with-spritekit Writing Games in Haskell with SpriteKit]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2015/09/skeletal-animation-for-games-in-haskell.html Skeletal animation for games in Haskell]<br />
<br />
* [http://free-idea-monoid.blogspot.ca/2014/03/experimenting-with-game-engine-concepts.html Experimenting with game engine concepts in Haskell]<br />
<br />
* [http://fho.f12n.de/posts/2014-10-25-easily-extensible-entity-enigma.html The easily extensible entity enigma]<br />
<br />
* [http://www.gamedev.net/page/resources/_/technical/game-programming/haskell-game-object-design-or-how-functions-can-get-you-apples-r3204 Haskell Game Object Design - Or How Functions Can Get You Apples]<br />
<br />
* [http://keera.co.uk/blog/2014/10/15/from-60-fps-to-500/ From 60 Frames per Second to 500 in Haskell]<br />
<br />
* [http://www.reddit.com/r/haskell/comments/2f9w0p/is_it_practical_to_write_a_strong_chess_engine_in/ Is it practical to write a strong chess engine in Haskell?]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-01-getting-started-with-netwire-and-sdl.html Getting Started with Netwire and SDL]<br />
<br />
* [https://github.com/alexander-b/master-thesis The Quest for Programming Nirvana: On Programming Game Systems in Haskell]; a Master Thesis on programming game systems in Haskell<br />
<br />
* [http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf Functional Programming and 3D Games] (thesis, PDF)<br />
<br />
* [http://blog.chucklefish.org/?p=154 Wayward Tide: Technical Info]<br />
<br />
* [https://ocharles.org.uk/blog/posts/2013-08-18-asteroids-in-netwire.html Asteroids & Netwire]<br />
<br />
* [http://jshaskell.blogspot.nl/2012/09/breakout.html Writing JavaScript games in Haskell - Breakout]<br />
<br />
* [https://github.com/leonidas/codeblog/blob/master/2012/2012-01-17-declarative-game-logic-afrp.md Purely Functional, Declarative Game Logic Using Reactive Programming]<br />
<br />
* [http://folk.uio.no/carljsv/computergames/computergames.pdf Computer Games'] - trying to implement the game flow of a computer game<br />
<br />
* [http://lambda-the-ultimate.org/node/1277 The Next Mainstream Programming Languages: A Game Developer's Perspective] (PPT, PDF) presentation by Tim Sweeney<br />
<br />
* [http://prog21.dadgum.com/23.html Purely Functional Retrogames]<br />
<br />
* [http://prog21.dadgum.com/36.html Accidentally Introducing Side Effects into Purely Functional Code]<br />
<br />
* [[media:wxhaskell.pdf | wxHaskell - A Portable and Concise GUI Library for Haskell]] (PDF) - describes an implementation of an asteroids game, [[wxAsteroids]]<br />
<br />
* [http://www.palgorithm.co.uk/2009/08/haskell-for-games/ Haskell for Games!] Blog post, with PDF slides from AngloHaskell talk.<br />
<br />
* [http://www.gamasutra.com/view/feature/2985/postmortem_naughty_dogs_jak_and_.php Postmortem: Naughty Dog's Jak and Daxter: the Precursor Legacy]; an article about a game developed with a [http://en.wikipedia.org/wiki/Domain-specific_language DSL] compiler written in Lisp<br />
<br />
* [http://lambdor.net/ Lambdor] blog mostly about Yampa FRP and game development in Haskell with some tutorials<br />
<br />
* [http://jshaskell.blogspot.de/ Writing JavaScript games in Haskell]<br />
<br />
* [http://lambdacube3d.wordpress.com/ LambdaCube 3D] is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
* [http://morgenthum.dev/articles/write-haskell-game How to write a game in Haskell from scratch]<br />
<br />
== Videos ==<br />
<br />
* [https://www.youtube.com/watch?v=9dk7_GDNocQ Playing with Graphics and Animations in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=AJQZg3Po-Ag bloxors: an OpenGL Logic Game written in Haskell]<br />
<br />
* [http://www.youtube.com/watch?v=XoE5CKLLnaM LambdaCube 3D - Stunts example]<br />
<br />
* [http://www.youtube.com/watch?v=JleoASegUlk LambdaCube 3D - Quake 3 example]<br />
<br />
* [https://www.youtube.com/watch?v=1MNTerD8IuI Writing a game in Haskell]<br />
<br />
== Examples ==<br />
<br />
<!-- add new ones at the top, probably --><br />
<br />
* [http://folk.uio.no/carljsv/gorillabas/ GorillaBAS] - this was an attempt on defining computer games, and build such a thing.<br />
<br />
* https://github.com/mlesniak/game - Haskell/OpenGL/Chipmunk game prototypes<br />
<br />
* [[wxAsteroids]], a well-documented game, based on [[wxHaskell]]<br />
<br />
* [https://github.com/simonmichael/hssdl-mac-example hssdl-mac-example] - how to make an SDL-using package buildable on mac OSX<br />
<br />
* http://codepad.org/LRGEkkDp - initialization for SDL to start rendering OpenGL stuff<br />
<br />
* http://hackage.haskell.org/package/stunts - A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
* http://hackage.haskell.org/package/dow - Dungeons of Wor is an homage to the classic arcade game, Wizard of Wor. This game is also an experiment in functional reactive programming, so it might be a useful resource to anyone interested in this topic.<br />
<br />
* [https://github.com/sseefried/open-epidemic-game Epidemic]: a small game for Android devices. As an added bonus a complete development environment for the game can be built with Docker using the [https://github.com/sseefried/docker-epidemic-build-env.git docker-epidemic-build-env] repo.<br />
<br />
* [https://github.com/ivanperez-keera/haskanoid haskanoid]: a well-documented breakout clone with SDL graphics and Kinect and Wiimote support. Written in FRP, there's a fork in Haskell for Android.<br />
<br />
* Possible Hackage categorisation guidelines: upload games to Game, engines and libs to Game Engine, or at least to some category beginning with Game, and check latest categories before uploading<br />
<br />
== Forums ==<br />
<br />
There are several forums in the Haskell world where game development can be discussed:<br />
* The [https://www.haskell.org/mailman/listinfo/haskell-cafe Haskell Café] mailing list<br />
<br />
* This page<br />
<br />
* [irc://irc.freenode.net/#haskell-game #haskell-game] ([[IRC]])<br />
<br />
* [http://www.haskellers.com/teams/7 Special Interest Groups » Games] at Haskeller.com<br />
<br />
* [https://github.com/haskell-game/brainstorming haskell-game] at GitHub<br />
<br />
* [http://www.reddit.com/r/haskellgamedev Haskell Game Development] at reddit<br />
<br />
The GitHub page [https://github.com/Calinou/awesome-gamedev awesome-gamedev] contains a list of general forums for game development, as well as lists of tools, utilities, libraries (some in Haskell) and learning resources.<br />
<br />
== Wishlist ==<br />
<br />
Is Hackage missing a useful data structure or library for some functionality that would benefit game programming? Suggestions for useful things can be added here as potential projects to hack on.<br />
<br />
* [https://hackage.haskell.org/package/Octree Octtree], [http://hackage.haskell.org/package/KdTree kd]-[http://hackage.haskell.org/package/kd-tree tree], various space partitioning techniques (maybe start with [http://hackage.haskell.org/package/spacepart spacepart]).<br />
<br />
* Binding to [http://www.fmod.org fmod]<br />
<br />
* Binding to [http://enet.bespin.org/Features.html enet] for multiplayer games. (jeffz is working on this).</div>Mikolajhttps://wiki.haskell.org/index.php?title=User_groups&diff=63047User groups2019-09-29T12:08:53Z<p>Mikolaj: /* Poland */</p>
<hr />
<div>[[Category:Community]]<br />
<br />
A range of Haskell User Groups are springing up all over.<br />
<br />
== Online communities ==<br />
<br />
* Official [https://discourse.haskell.org/ discourse] forum<br />
<br />
* [https://discordapp.com/channels/280033776820813825 discord] <em>Haskell</em> subchannel on <em>Functional Programming</em> channel<br />
<br />
=== Reddit ===<br />
* [https://www.reddit.com/r/haskell/ /r/haskell]<br />
* [https://www.reddit.com/r/haskellgamedev /r/haskellgamedev]<br />
* [https://www.reddit.com/r/haskelltil /r/haskelltil]<br />
* [https://www.reddit.com/r/haskellquestions /r/haskellquestions]<br />
<br />
=== Facebook Groups ===<br />
* [https://www.facebook.com/groups/programming.haskell Programming Haskell]<br />
* [https://www.facebook.com/groups/learning.haskell Learning Haskell]<br />
<br />
=== Google+ communities ===<br />
(Google+ is scheduled for shutdown on April 2, 2019)<br />
<br />
* [https://plus.google.com/communities/101629034466170191725 Haskell: The Haskell-Beginners Community]<br />
* [https://plus.google.com/communities/104818126031270146189 Haskell]<br />
<br />
<br />
* Questions tagged <em>haskell</em> on [https://stackoverflow.com/questions/tagged?tagnames=haskell StackOverflow]<br />
<br />
== User groups ==<br />
<br />
Regular meetings in a particular geographical area. Great if you want to see and meet other Haskellers.<br />
<br />
<br />
===Africa===<br />
<br />
====South Africa====<br />
; [http://www.meetup.com/lambda-luminaries/ Lambda Luminaries] : Functional programming user group based in Centurion, Gauteng.<br />
<br />
===Asia===<br />
<br />
====China====<br />
;[http://lisp.org.cn/en/ China Lisp User Group]<br />
:China Lisp User Group (CLUG) is the earliest founded Lisp user group in China. <br />
<br />
====Hong Kong====<br />
;[http://www.meetup.com/HK-Functional-programming/ Hong Kong Functional Programming User Meetup Group]<br />
<br />
====India====<br />
;[https://t.me/haskellindia Haskell India Group]<br />
: Telegram group that complements existing personal meetups at various places in India. To join, go here on your mobile browser: https://t.me/haskellindia<br />
<br />
;[https://www.meetup.com/The-Bangalore-Haskell-User-Group/ The Bangalore Haskell User Group]<br />
: We are a diverse group of experienced Haskellers, commercial Haskell users as well as learners, meeting up at Bangalore usually on Saturdays at 3:00 PM - 5:00 PM.<br />
<br />
====Japan====<br />
;[https://haskell.jp/ Japan Haskell Users Group (Haskell-jp)]<br />
:blog, slack, recipes, events (meetings) and more<br />
<br />
;[http://www.starling-software.com/en/tsac.html Tokyo Society for the Application of Currying]<br />
<br />
;[http://www.meetup.com/Tokyo-Haskell-Meetup/ Tokyo Haskell Meetup]<br />
:Casual monthly meetings to help each other learn Haskell<br />
<br />
====Singapore====<br />
;[https://www.meetup.com/HASKELL-SG HASKELL.SG Meetup]<br />
<br />
===Europe===<br />
<br />
==== Belgium ====<br />
<br />
;[[Ghent Functional Programming Group]]<br />
:The Ghent Functional Programming Group will be having its first meeting on April 1, 2010.<br />
<br />
;[https://groups.google.com/forum/#!forum/leuven-haskell Leuven Haskell User Group]<br />
:The Leuven Haskell User Group was launched on March 3, 2015 and meets every two weeks.<br />
<br />
==== Czech Republic ====<br />
<br />
;[https://fpbrno.github.io Functional Programming Brno]<br />
<br />
==== France ====<br />
<br />
;[[Fr/Haskell]]<br />
:The Strasbourg HUG meets monthly in an informal setting. Level is very low and newbies are very welcome.<br />
<br />
==== Germany ====<br />
<br />
;Curry Club Augsburg<br />
:http://curry-club-augsburg.de/<br />
<br />
;Berlin HUG<br />
:http://www.meetup.com/berlinhug/<br />
<br />
;Haskell in Frankfurt<br />
: <ul><li>[http://www.meetup.com/Frankfurt-Haskell-User-Group Frankfurt Haskell User Group] meets monthly.</li><li> [http://wiki.lug-frankfurt.de/Programmierworkshop/aktuell Regular Saturday Workshop] taking place every couple of months. Feel free to join us!</li><br />
<br />
;[http://www.iba-cg.de/hal5.html Haskell in Leipzig]<br />
:Hal, they have videos [http://iba-cg.de/haskell.html online].<br />
<br />
;[http://www.haskell-munich.de Haskell in Munich]<br />
: We had our first meeting on Thursday, 29th of September 2011. We are always looking forward to see new people. If you can make it to Munich, consider joing us!<br />
<br />
;[http://www.meetup.com/de-DE/Regensburg-Haskell-Meetup Regensburg Haskell Meetup]<br />
: We meet regularly once a month since 2014. Folks from the Munich and Nuremberg area frequently join.<br />
<br />
;Interest for User Groups in Germany<br />
* '''Ulm''': [[HugUlm]]<br />
* '''Mannheim or Heidelberg''': [[User:Cgo|cgo]] ([http://www.haskell.org/haskellwiki/?title=Special:Emailuser&target=Cgo mail]), [[User:HC|hc]]<br />
<br />
==== Greece ====<br />
<br />
;[https://groups.google.com/forum/#!forum/haskell-greece/ Haskell Greece Google group]<br />
<br />
==== Hungary ====<br />
<br />
;[http://www.meetup.com/Bp-HUG Budapest Haskell User Group]<br />
:The Haskell User Group is a group of Haskell enthusiasts who are interested in sharing their knowledge and meeting people who share similar interests. We had our first meeting in September 2013.<br />
<br />
==== Iceland ====<br />
<br />
;[[Reykjavik Haskell User Group]] Iceland<br />
;[http://groups.google.com/group/haskell-is Currently recruiting members]<br />
<br />
==== Israel ====<br />
<br />
;[[IsraelHaskell]] User Group<br />
:[http://archive.fo/HKbQG Are getting organised].<br />
* '''Konstanz''': [[User:Thkoch|thkoch]]<br />
<br />
==== Italy ====<br />
;[[ItaloHaskell]]<br />
:We had a first meeting in August 2008 and we are planning a second one sometime during the 2008/2009 Autumn/Winter season.<br />
<br />
==== Netherlands ====<br />
<br />
;[http://dutchhug.nl/ Dutch HUG]<br />
:The Dutch HUG meets monthly in an informal setting.<br />
<br />
==== Norway ====<br />
<br />
;[http://www.meetup.com/Oslo-Haskell/ Osλo Haskell]<br />
:Osλo Haskell is a group for Haskellers and people interested in Haskell and related languages in and around Oslo. We had our first meeting in March 2014.<br />
<br />
;[http://www.meetup.com/Trondheim-Haskell-Users-Group/ Trondheim Haskell Users' Group]<br />
:A Haskell users' group in the Trondheim area. For seasoned veterans, complete newbies who only heard of Haskell two minutes ago, and everyone in between and beyond. We meet and talk about Haskell and anything else members are interested in.<br />
<br />
==== Poland ====<br />
;[https://www.meetup.com/Monadic-Warsaw Monadic Warsaw] <br />
We meet irregularly in Warsaw and have presentations in English and then talks over beer about anything of interest to functional programmers and enthusiasts, though Haskell topics appear more often than others. You are kindly welcome!<br />
<br />
==== Russia ====<br />
<br />
;[http://ruhaskell.org/ Russian community of Haskell-developers]<br />
;[http://spbhug.folding-maps.org Saint-Petersburg Haskell User Group]<br />
;[https://groups.google.com/forum/#!forum/mskhug Moscow Haskell User Group]<br />
;[https://groups.google.com/forum/#!aboutgroup/haskell-russian haskell-russian mailing list]<br />
<br />
==== Switzerland ====<br />
<br />
;[http://www.meetup.com/HaskellerZ/ Haskell User Group Zurich]<br />
:We are meeting once a month to share knowledge of and experience with Haskell.<br />
<br />
;[http://www.meetup.com/Geneva-Haskell-Group/ Geneva Haskell Group]<br />
:We are a Haskell community in Geneva planning to meet up every week.<br />
<br />
==== Turkey ====<br />
<br />
;[http://groups.google.com/group/core-haskell?lnk=srg Turkey Haskell Programmer's Group]<br />
:Formed by Turkish Functional Programmers, the group began to communicate via an e-mail list opened by core.gen.tr. The first contribution is hlibev project by Aycan iRiCAN.<br />
<br />
;[http://bilfp.wikidot.com/ BILFP (Bilkent University Comp. Eng. Dept. Functional Programming Society)] Turkey <br />
:Project aims to improve people's knowledge and encourage the use of functional programming languages &mdash; especially in Turkey. Group is open to functional-programming-related discussions and establishes related presentations at Bilkent University that are open to anybody.<br />
<br />
==== UK ====<br />
;[http://lambdalounge.org.uk/ Manchester Lambda Lounge]<br />
:We are an active community meeting monthly at the [http://madlab.org.uk/ Madlab] (Manchester Digital Laboratory) to talk about topics in functional programming.<br />
<br />
;[http://www.meetup.com/hoodlums/ Hoodlums - Haskell developer meetup]<br />
:Meets monthly on the second Thursday of the month in Canary Wharf. It is a "Coding Dojo" format where we pick some interesting problem and solve it as a group. <br />
<br />
;[http://www.meetup.com/London-HUG/ London Haskell User Group]<br />
:The main meetings are monthly on the last or fourth Thursday of the month. The group was revived in late 2012.<br />
<br />
;[http://www.meetup.com/ed-lambda/ ed lambda (Edinburgh, UK)]<br />
:For functional programming in general, founded by a Haskeller. First meeting will be September 13th 2010.<br />
<br />
;[http://groups.google.com/group/oxhug OxHUG - the Oxford Haskell Users Group]<br />
:Meets every other week, currently at the Department of Computer Science, University of Oxford. Discussion session followed by adjournment to a local tavern. Aimed at students, graduates, professionals and enthusiasts.<br />
<br />
;[http://groups.google.com/group/fp-southwales fp-southwales], the South Wales Functional Programming User Group<br />
:Starting up in late 2009, based out of Swansea University.<br />
<br />
==== Ukraine ====<br />
;[https://groups.google.com/forum/#!forum/ltu-kiev LtU-Kiev community]<br />
:Irregular meetups, usually with prepared talks on Haskell and other FP topics.<br />
;[http://www.haskell.od.ua Odessa Haskell User Group]<br />
:Regular informal meetups (approximately once a month) in a pub or cafe<br />
<br />
===North America===<br />
<br />
====Central====<br />
<br />
;[http://leibnizdream.wordpress.com/2007/12/22/new-austin-functional-programmers-group-in-2008/ Austin Functional Programmers Group]<br />
:See the [http://groups.google.com/group/austin-fp discussion group] for more.<br />
<br />
;[http://www.meetup.com/Boulder-Haskell-Programmers/ Boulder Haskell Programmers]<br />
: Boulder and Denver (Colorado) area Haskell Programmer Group. Meetings are focused on practical topics faced by working programmers. All experience levels are welcome.<br />
<br />
;[http://groups.google.com/group/real-world-haskell-book-club/browse_thread/thread/3e8e59768c8c50a9 Colorado Area Haskell Study Group]<br />
<br />
;[http://ChicagoHaskell.com Chicago Haskell] — First general meeting in December 2009. — [https://groups.google.com/forum/#!forum/haskell-chicago Mailing List] — [https://twitter.com/ChicagoHaskell @ChicagoHaskell]<br />
<br />
;[http://www.meetup.com/DenHUG/ Denver Area Haskell Users Group] -- DenHUG had it's first meeting on 27 Feb 2010. Next meeting will be 3 Apr 2010.<br />
<br />
;[http://www.meetup.com/Houston-Haskell-Users-Group/ Houston Haskell Users Group] -- Meets the 1st Monday of every month at [https://txrxlabs.org/ TxRx labs]<br />
<br />
;[http://www.lambdalounge.org St. Louis Lambda Lounge] -- Meets the 1st Thursday of the month. Since Dec 2008, Lambda Lounge is a user group in St. Louis organized loosely around the idea of exploring dynamic and functional languages.<br />
<br />
;[http://www.meetup.com/Nashville-Haskell-Users-Group Nashville Haskell Users Group (NHUG)] -- Meets 1st Tuesday of each month.<br />
<br />
====East Coast====<br />
<br />
;[http://groups.google.com/group/bostonhaskell Boston Haskell Users' Group].<br />
:Meets monthly.<br />
<br />
;[http://www.meetup.com/NY-Haskell/ New York Haskell Users Group]<br />
:The NY Haskell Users Group is for all programmers either interested in or experienced with the Haskell programming language. Meets monthly.<br />
<br />
;[http://www.meetup.com/lisp-59/ New York Functional Programmers]<br />
:Come and meet like-minded functional programmers in the New York area.<br />
<br />
;[http://www.meetup.com/Haskell-DC/ Haskell DC]<br />
:Washington DC area Meetup for Haskell.<br />
<br />
;[http://www.lisperati.com/fringedc.html FringeDC Washington]<br />
:Meetings about functional programming languages in Washington DC.<br />
<br />
;[http://groups.google.com/group/AFPUG Atlanta Functional Programming Users Group]<br />
:Meet other functional programmers in the Atlanta area. Join us and geek out!<br />
<br />
;Toronto Haskell User Group<br />
:Haskellers of Toronto, unite! We meet at [https://bentomiso.com/events Bento Miso] on the second Wednesday of every month (check the [https://bentomiso.com/events event page] to be sure; it's usually up-to-date). There is also a small organizational [http://groups.google.com/group/toronto-haskell/ mailing list] you can join to keep up to date.<br />
<br />
;Toronto Haskell Meetup<br />
:A beginner friendly place to learn about Haskell, ask questions, and meet friendly FP enthusiasts - [https://www.meetup.com/meetup-group-evRITRtT/ you can find us on meetup.com]<br />
<br />
;[http://www.haskellers-montreal.com/ Haskellers Montreal Group].<br />
:Meets every 2 months on the first Wednesday of that month, currently at Centre [http://cloud.ca Cloud.ca] (previously known as RPM). Talks alternate from expert-level to more newcomer-oriented ones; and we organize through our [http://haskell-meetup.sandreckoning.com/ website], a [https://groups.google.com/forum/#!forum/haskellers-montreal Google group] and a [http://www.meetup.com/Haskellers-Montreal-Meetup/ meetup.com] page.<br />
<br />
====West Coast ====<br />
<br />
;[http://socalfp.blogspot.com/ SoCal FP Group]<br />
<br />
;[http://www.meetup.com/sandiegohug/ San Diego Haskell User Group]<br />
:a Haskell User Group for the San Diego and Tijuana region<br />
<br />
;[http://bayfp.org/ The Bay Area Functional Programmers group]<br />
:Meeting monthly in the San Francisco Bay area. See [http://bayfp.org/blog their blog] for more details and news of upcoming meetings.<br />
<br />
;[http://pdxfunc.org PDXfunc: Portland FP Group]<br />
:Monthly meetings of the Portland, Oregon functional programming group. Meetings occur on the second Monday of each month at 7 pm, typically in Downtown/NW Portland.<br />
<br />
;[http://seattlehaskell.org/ Seattle Area Haskell Users' Group]<br />
:Monthly get-togethers serving Seattle and the Eastside (see also [http://meetup.com/SEAHUG/ Meetup.com] for details)<br />
<br />
;[http://www.haskell.org/pipermail/haskell-cafe/2008-February/038991.html Seattle: Northwest Functional Programming Interest Group]<br />
:a Northwest Functional Programming Interest Group in Seattle.<br />
<br />
;[http://www.meetup.com/Vancouver-Haskell-Unmeetup/ Vancouver Haskell UnMeetup]<br />
:Monthly interactive sessions, (+10) for joining<br />
<br />
===Oceania===<br />
====Australia====<br />
<br />
;[http://groups.google.com/group/fp-syd FP-SYD, the Sydney (Australia) Functional Programming group]<br />
:FP hackers in Sydney.<br />
<br />
;[http://sites.google.com/site/fpunion/ (FPU) Melbourne Functional Programming Union]<br />
:The FPU is a collective of functional programming language enthusiasts, which has been in operation since 1998. We are based at the University of Melbourne, in the Department of Computer Science and Software Engineering, but we are open to all members of the community. We meet on a regular basis for lively discussions on topics broadly associated with the declarative programming paradigm.<br />
<br />
;[http://bfpg.org/ Brisbane Functional Programming Group (BFPG)] ([http://www.meetup.com/Brisbane-Functional-Programming-Group-BFG/ Meetup page])<br />
:A group for Functional Programming with Haskell, Scala and other languages.<br />
<br />
;[http://meetup.com/PerthFP/ Perth Functional Programmers Meetup]<br />
:A group in Perth, WA for Functional Programming with Haskell, Scala and other languages.<br />
<br />
===South America===<br />
<br />
==== Bolivia ====<br />
; [https://www.facebook.com/groups/111518795538430/ Comunidad Haskell San Simon (CHSS)]<br />
: Haskell user group for Bolivia and spanish speaking community<br />
<br />
====Brazil====<br />
;[[User_groups/Brazil|Grupo Brasileiro de Usuários de Haskell]]<br />
: Grupo criado para reunir os desenvolvedores e entusiastas que utilizam Haskell no Brasil<br />
<br />
====Ecuador====<br />
; [http://www.meetup.com/Quito-Lambda-Meetup/ Quito Lambda]<br />
: A monthly meetup about functional programming in Quito, Ecuador<br />
<br />
== Workshops/meet ups ==<br />
<br />
Less regular, and move around. Usually have a few talks from invited speakers.<br />
See the [[Haskell]] homepage for a list of upcoming events.<br />
<br />
== Hackathons ==<br />
<br />
Getting together to squash bugs and write new stuff. For a list of past and upcoming hackathons, see the [[Hackathon]] page.<br />
<br />
== Conferences ==<br />
<br />
See the [[Haskell_in_research#Conferences|Haskell in research]] and [[Conferences]] page for academic workshops and conferences<br />
focusing on Haskell and related technology.</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=62900Applications and libraries/Games2019-04-11T15:59:19Z<p>Mikolaj: Graduate both Allure and LambdaHack out of the ambiguous Incomplete/Not Abandoned category</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://allureofthestars.com Allure of the Stars]<br />
: A near-future Sci-Fi roguelike and tactical squad combat game. In brilliant 16-color ASCII, grid-based, turn-based, with a story, stealth, cool-down melee weapons, slow projectiles and fast explosions. Browser and native binaries. Free software using the {{HackagePackage|id=LambdaHack}} roguelike game engine. This incarnation complete, but in constant development and accepting contributions of all kinds.<br />
<br />
;{{HackagePackage|id=babylon}}<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[https://www.haskell.org/communities/11-2015/html/report.html#sect7.13.5 Barbarossa]<br />
:A UCI chess engine written completely in Haskell<br />
<br />
;[https://github.com/plneappl/BeHaskelled BeHaskelled]<br />
: A Bejeweled clone written completely in Haskell with {{HackagePackage|id=gloss}}.<br />
<br />
;{{HackagePackage|id=board-games}}<br />
: Computer player algorithms for three games: Connect Four, Rows&Columns, Mastermind. Intended for running as a web server.<br />
<br />
;{{HackagePackage|id=boomslang}}<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend Defend The King from Forces of Different]<br />
: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.increpare.com/2008/11/endless-cavern/ Endless Cavern]<br />
: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[http://mfuglos.github.io/jeopardy Fuglos Jeopardy]<br />
:Fuglos Jeopardy is a free implementation of a game resembling the popular quiz show 'Jeopardy'. It is written using Gtk2Hs as GUI toolkit. It is quite feature complete and easy to use. It contains support for LaTeX, so you can for example use LaTeX math syntax in your data sheets and thus organize a math jeopoardy event. Licensed under GPL3.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hex, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
; [https://github.com/ocharles/hadoom hadoom]<br />
:A clone of Doom, using reactive-banana, GTK, and the "diagrams" library.<br />
<br />
; [https://github.com/ivanperez-keera/haskanoid haskanoid]<br />
:A breakout game with SDL graphics and Kinect and Wiimote support. Written in FRP, there's a fork in Haskell for Android.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://www.cs.ox.ac.uk/people/ian.lynagh/Hetris/ Hetris]<br />
:ASCII Tetris in Haskell<br />
<br />
;{{HackagePackage|id=hfiar}}<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;{{HackagePackage|id=hinvaders}}<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[https://github.com/mchakravarty/lazy-lambda Lazy Lambda]<br />
:Lazy Lambda is a simple Flappy Bird clone in Haskell, implemented with [https://github.com/mchakravarty/HaskellSpriteKit Haskell SpriteKit]. It was originally developed for the [https://speakerdeck.com/mchakravarty/playing-with-graphics-and-animations-in-haskell Compose :: Melbourne 2016 keynote], where it was live coded in the second half of the presentation.<br />
<br />
;[http://quasimal.com/projects/level_0.html Level 0]<br />
:A fun and featureful Snake II clone using SDL.<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;{{HackagePackage|id=mage}}<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;{{HackagePackage|id=MazesOfMonad}}<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only. Modernized repository [https://github.com/bbarker/MazesOfMonad maintained on GitHub].<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on Hackage as {{HackagePackage|id=Monadius}}; see also the [http://www.youtube.com/watch?v=zqFgQiPKtOI video])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github], [https://github.com/keera-studios/monao New maintained version on github]<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game.<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://sourceforge.net/projects/puzhs/ puzhs]<br />
:Haskell bindings to [https://code.google.com/p/puz/ libpuz]<br />
<br />
;[http://haskell-tetris.pbworks.com/w/page/16967421/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://srineet.brinkster.net/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;{{HackagePackage|id=Shu-thing}}<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;{{HackagePackage|id=SpaceInvaders}}<br />
:A video game, based on [[Yampa]]<br />
<br />
;{{HackagePackage|id=stunts}}<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[https://github.com/nbartlomiej/tfoo Tfoo]<br />
:A simple Five in a Row game. Online, with server-sent events, deployed to [http://tfoo.herokuapp.com/ Heroku], open source.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
;{{HackagePackage | id =Yogurt}}<br />
:A functional MUD client featuring prioritized, regex-based hooks, variables, timers, logging, dynamic loading of Yogurt scripts and more. For example programs, please see [http://code.google.com/p/yogurt-mud/ Yogurt's home page]. <br />
<br />
=== Commercial games ===<br />
;[https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies Magic Cookies!]<br />
:A lights-out clone for iOS and Android written in Haskell using SDL2 graphics and the FRP implementation Yampa. Created by [http://facebook.com/keerastudios Keera Studios], available on [https://itunes.apple.com/us/app/magic-cookies/id1244709871?mt=8 iTunes] and [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies Google Play for Android].<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
; [https://github.com/EricThoma/hchess hchess]<br />
: Incomplete toy chess engine<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[https://github.com/egonSchiele/actionkid actionkid]<br />
:A video game framework, with a [http://vimeo.com/109663514 video tutorial] and [https://github.com/egonSchiele/chips chips], a game based on it.<br />
<br />
;[[Bogre-Banana]]<br />
:A 3D game-engine for Haskell. It uses Haskell bindings to the OGRE 3D engine and OIS input system and a library called reactive-banana, to create a "Functional Reactive Programming" game-engine.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://hackage.haskell.org/package/free-game free-game]<br />
:A GUI/game library based on free monads.<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [https://github.com/haskell-game/fungen/blob/master/examples/hello.hs simple] [https://github.com/haskell-game/fungen/blob/master/examples/pong/pong.hs 2D] [https://github.com/haskell-game/fungen/blob/master/examples/worms/worms.hs games], in Haskell. Example code: [http://joyful.com/fungen/site/example.html A Brief Example]. Forks and patches welcome!<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://gloss.ouroborus.net/ Gloss]<br />
:An OpenGL abstraction layer supporting game-style main loops.<br />
<br />
;[https://github.com/haskell-game haskell-game]<br />
:A project to make game development with Haskell easier to get started with by providing a suite of libraries for covering all sorts of aspects of game development.<br />
<br />
;[https://github.com/mchakravarty/HaskellSpriteKit Haskell SpriteKit]<br />
:Haskell SpriteKit provides a purely functional interface to the SpriteKit game engine on Apple platforms. SpriteKit is a state-of-the-art engine for 2D games and includes a versatile animation framework and an integrated physics engine. It is easy to use without the need for low-level programming or advanced concepts, such FRP.<br />
<br />
;[http://helm-engine.org/ Helm]<br />
:A functionally reactive game engine inspired by [http://elm-lang.org/ Elm].<br />
<br />
;[http://hackage.haskell.org/package/HGamer3D HGamer3D]<br />
:A game engine for Windows which includes Haskell bindings to a couple of C++ libraries and a Haskell API on top of that. Features include Audio, Joystick, Mouse and Keyboard handling, GUI, Network, Physics, 3D graphics. <br />
:[https://www.youtube.com/watch?v=v_GSbObYRkY Y-Wing flight] is a video of a demonstration of the possibilities of HGamer3D.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://chipmunk-physics.net/ Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[https://github.com/asivitz/Hickory Hickory]<br />
:Hickory is not really a game engine. It's more of a collection of tools and abstractions that can be used to make games. It doesn't have opinions and doesn't force you into a particular paradigm.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://lambdacube3d.com/ LambdaCube 3D]<br />
:LambdaCube 3D is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
; [https://github.com/LambdaHack/LambdaHack LambdaHack]<br />
: A game engine library for turn- and grid-based roguelike games, with optional tactical squad combat. Produces both browser and native binary games. You need to specify the content to be procedurally generated and the engine builds the world and runs it. Actively developed, accepting extensions and all kinds of contributions.<br />
<br />
;[http://hackage.haskell.org/package/set-cover set-cover]<br />
:Solver for exact set cover problems. Included examples: [[Sudoku]], [[Mastermind]], [[Nonogram]], Domino tessellation, 8 Queens, Soma Cube, [[Tetris Cube]], Cube of L's, Logika's Baumeister puzzle. Generic algorithm allows to choose between slow but flexible Set from containers package and fast but cumbersome bitvectors.<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/keera-studios/gtk-helpers gtk-helpers]<br />
:A collection of auxiliary operations related to Gtk2hs. See also [http://keera.co.uk/blog/2013/03/19/creating-board-games-in-haskell/ Creating board games in Haskell in 100 lines of code]<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://bananu7.github.io/Hate Hate]<br />
:Hate is a small framework for graphical haskell games and applications. It's heavily inspired by Love and aims at similar ease of use, but within the power of Haskell's type and concurrency safety.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Bresenham%27s_line_drawing_algorithm&diff=62425Bresenham's line drawing algorithm2018-04-13T09:59:11Z<p>Mikolaj: Add link to an alternative implementation</p>
<hr />
<div><haskell><br />
<br />
import List (sort,unfoldr)<br />
<br />
type Point = (Integer,Integer)<br />
<br />
line :: Point -> Point -> [Point]<br />
line pa@(xa,ya) pb@(xb,yb) = map maySwitch . unfoldr go $ (x1,y1,0)<br />
where<br />
steep = abs (yb - ya) > abs (xb - xa)<br />
maySwitch = if steep then (\(x,y) -> (y,x)) else id<br />
[(x1,y1),(x2,y2)] = sort [maySwitch pa, maySwitch pb]<br />
deltax = x2 - x1<br />
deltay = abs (y2 - y1)<br />
ystep = if y1 < y2 then 1 else -1<br />
go (xTemp, yTemp, error)<br />
| xTemp > x2 = Nothing<br />
| otherwise = Just ((xTemp, yTemp), (xTemp + 1, newY, newError))<br />
where<br />
tempError = error + deltay<br />
(newY, newError) = if (2*tempError) >= deltax<br />
then (yTemp+ystep,tempError-deltax)<br />
else (yTemp,tempError)<br />
<br />
</haskell><br />
<br />
Thanks to Cheddai Fouche for the above implementation.<br />
<br />
The core logic is in the "go" function which is passed to unfoldr.<br />
<br />
And here is an implementation of generalized Bresenham's line drawing algorithm, in terms of balanced words: https://github.com/LambdaHack/LambdaHack/blob/2f031f8a09d07d46b8e0dfeff1d9653d31ea19cc/Game/LambdaHack/Common/Point.hs#L112</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=62117ThreadScope2017-09-04T13:16:56Z<p>Mikolaj: /* Binary releases */ Get rid of the mention of the really ancient binaries</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then run following commands<br />
<br />
cabal update<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
alternatively, if you have [[stack]], you can install threadscope by running<br />
<br />
stack install threadscope<br />
<br />
Next, check out the user guide. We call it the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
=== Binary releases ===<br />
<br />
For Linux, Windows and OSX there are binary releases available at the [https://github.com/haskell/ThreadScope/releases github page].<br />
<br />
If you use one of these, you are good to go and do not need anything else.<br />
<br />
=== Building from source ===<br />
<br />
If you're on another OS or adventurous, you can build ThreadScope from source.<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
=== Checking that ThreadScope works ===<br />
<br />
Once you installed ThreadScope, you can<br />
try to run it to make sure it works correctly<br />
by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
ThreadScope development takes place on<br />
[https://github.com/haskell/ThreadScope the ThreadScope github page].<br />
Please file your bug reports [https://github.com/haskell/ThreadScope/issues over there].<br />
<br />
The source for ghc-events and threadscope is available from github<br />
<br />
git clone git@github.com:haskell/ghc-events.git<br />
git clone git@github.com:haskell/ThreadScope.git<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=61741ThreadScope2017-04-21T15:12:51Z<p>Mikolaj: /* Binary releases */</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then run following commands<br />
<br />
cabal update<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
alternatively, if you have [[stack]], you can install threadscope by running<br />
<br />
stack install threadscope<br />
<br />
Next, check out the user guide. We call it the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
=== Binary releases ===<br />
<br />
For Windows and OSX there are some old binary releases available:<br />
* Windows: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.zip threadscope-0.2.2.zip]<br />
* Mac OSX: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.dmg threadscope-0.2.2.dmg]<br />
<br />
Newer binary releases for some operating systems may appear at the [https://github.com/haskell/ThreadScope/releases github page].<br />
<br />
If you use one of these, you are good to go and do not need anything else.<br />
<br />
=== Building from source ===<br />
<br />
If you're on another OS or adventurous, you can build ThreadScope from source.<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
=== Checking that ThreadScope works ===<br />
<br />
Once you installed ThreadScope, you can<br />
try to run it to make sure it works correctly<br />
by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
ThreadScope development takes place on<br />
[https://github.com/haskell/ThreadScope the ThreadScope github page].<br />
Please file your bug reports [https://github.com/haskell/ThreadScope/issues over there].<br />
<br />
The source for ghc-events and threadscope is available from github<br />
<br />
git clone git@github.com:haskell/ghc-events.git<br />
git clone git@github.com:haskell/ThreadScope.git<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=61740ThreadScope2017-04-21T15:12:23Z<p>Mikolaj: /* Binary releases */</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then run following commands<br />
<br />
cabal update<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
alternatively, if you have [[stack]], you can install threadscope by running<br />
<br />
stack install threadscope<br />
<br />
Next, check out the user guide. We call it the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
=== Binary releases ===<br />
<br />
For Windows and OSX there are binary releases available:<br />
* Windows: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.zip threadscope-0.2.2.zip]<br />
* Mac OSX: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.dmg threadscope-0.2.2.dmg]<br />
<br />
Newer binary releases for some operating systems may appear at the [https://github.com/haskell/ThreadScope/releases github page].<br />
<br />
If you use one of these, you are good to go and do not need anything else.<br />
<br />
=== Building from source ===<br />
<br />
If you're on another OS or adventurous, you can build ThreadScope from source.<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
=== Checking that ThreadScope works ===<br />
<br />
Once you installed ThreadScope, you can<br />
try to run it to make sure it works correctly<br />
by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
ThreadScope development takes place on<br />
[https://github.com/haskell/ThreadScope the ThreadScope github page].<br />
Please file your bug reports [https://github.com/haskell/ThreadScope/issues over there].<br />
<br />
The source for ghc-events and threadscope is available from github<br />
<br />
git clone git@github.com:haskell/ghc-events.git<br />
git clone git@github.com:haskell/ThreadScope.git<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Foldable_Traversable_In_Prelude&diff=59265Foldable Traversable In Prelude2015-02-02T10:01:27Z<p>Mikolaj: Add a TODO about a sentense that may be misinterpreted to mean that 100 packages it broken by FTP</p>
<hr />
<div>This page is a FAQ for the FTP (Foldable/Traversable in Prelude proposal) otherwise known as the BBP (Burning Bridges Proposal), slated for inclusion in the core libraries of GHC 7.10. While elements of this proposal may still be under discussion, this page is intended to summarize the proposal as it now stands as of 28 January, 2015. It is a work in progress, done as best as possible, but should not be taken as necessarily a full statement by the libraries committee on every aspect of this proposal.<br />
<br />
== Where did the FTP come from? ==<br />
<br />
The FTP was proposed in the context of a very lengthy [http://osdir.com/ml/libraries@haskell.org/2013-05/msg00280.html "Burning Bridges"] thread on the haskell libraries list in the summer of 2013.<br />
<br />
Over the course of this thread and subsequent and related discussions it was revealed there was a large appetite in the community to "modernize" the Prelude and bring it into line with the current widespread usage of classes such as Applicative, Foldable, and Traversable. Out of these discussions, a "Core Libraries Committee" was formed to manage and steward such large changes in a way to vet them thoroughly and ensure minimal breakage in carrying them out.<br />
<br />
== What does the FTP do? ==<br />
<br />
The FTP does what it says. It brings Foldable and Traversable into the Prelude. Along with this, it replaces Prelude functions that clash with Foldable and Traversable with their more polymorphic versions as drawn from those two classes and their associated methods. One goal here is that people should be able to use methods from these modules without the need of a qualified import -- i.e. to prevent clash in the namespace, by resolving such in favor of the more generalized versions. Additionally, there are some new methods added to the Foldable class because it seems to be the "right" thing. This proposal is semi-independent from the rest of FTP, but the changes tend to have been discussed under the same general umbrella.<br />
<br />
== Does the FTP change any behaviour? ==<br />
<br />
No (almost). By design, nearly any code that compiles under these changes should operate exactly as prior to these changes. If you believe you have found an area where these changes cause a semantic difference, it is a bug and should be reported.<br />
<br />
There are, however, changes to the behaviour of Data.Foldable.sum, Data.Foldable.product, Data.Foldable.maximum, and Data.Foldable.minimum on lists and only on lists, in order to bring them into accord with the prelude.<br />
<br />
== So does the FTP break any code? ==<br />
<br />
As little as possible. Many of the seemingly "odd" aspects of FTP come from engineering choices made specifically so as to minimize code breakage. In particular, a few packages may be broken by new exports from the prelude such as mconcat and foldMap. A few more may be broken by the export of new additions to the Foldable class. And finally, there are a few packages that may be broken by the new generalized signature in the prelude not being sufficient to pin down some otherwise already polymorphic code (particularly in the case of using -XOverloadedStrings).<br />
<br />
On the other hand, 569 packages in Stackage, including the core of it, build without problems. According to Edward Kmett, "of the 50-100 that remain, most are awaiting author feedback on already-filed issues / fixes or are broken by a small change downstream." [TODO: Please clarify if the failures of the remaining packages seem to be caused by FTP or not, in general.]<br />
<br />
== What are the concrete changes in the FTP? ==<br />
Here is a diff of the relevant changes. Note that there are other changes, not listed here, notably those introduced by the "AMP", which makes Applicative a superclass of Monad.<br />
<br />
<nowiki><br />
Control.Monad<br />
- foldM :: Monad m => (a -> b -> m a) -> a -> [b] -> m a<br />
+ foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b<br />
- foldM_ :: Monad m => (a -> b -> m a) -> a -> [b] -> m ()<br />
+ foldM_ :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m ()<br />
- forM :: Monad m => [a] -> (a -> m b) -> m [b]<br />
+ forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b)<br />
- forM_ :: Monad m => [a] -> (a -> m b) -> m ()<br />
+ forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m ()<br />
- mapM :: Monad m => (a -> m b) -> [a] -> m [b]<br />
+ mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)<br />
- mapM_ :: Monad m => (a -> m b) -> [a] -> m ()<br />
+ mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()<br />
- msum :: MonadPlus m => [m a] -> m a<br />
+ msum :: (Foldable t, MonadPlus m) => t (m a) -> m a<br />
- sequence :: Monad m => [m a] -> m [a]<br />
+ sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)<br />
- sequence_ :: Monad m => [m a] -> m ()<br />
+ sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()<br />
<br />
Data.List<br />
- all :: (a -> Bool) -> [a] -> Bool<br />
+ all :: Foldable t => (a -> Bool) -> t a -> Bool<br />
- and :: [Bool] -> Bool<br />
+ and :: Foldable t => t Bool -> Bool<br />
- any :: (a -> Bool) -> [a] -> Bool<br />
+ any :: Foldable t => (a -> Bool) -> t a -> Bool<br />
- concat :: [[a]] -> [a]<br />
+ concat :: Foldable t => t [a] -> [a]<br />
- concatMap :: (a -> [b]) -> [a] -> [b]<br />
+ concatMap :: Foldable t => (a -> [b]) -> t a -> [b]<br />
- elem :: Eq a => a -> [a] -> Bool<br />
+ elem :: (Foldable t, Eq a) => a -> t a -> Bool<br />
- find :: (a -> Bool) -> [a] -> Maybe a<br />
+ find :: Foldable t => (a -> Bool) -> t a -> Maybe a<br />
- foldl :: (b -> a -> b) -> b -> [a] -> b<br />
+ foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b<br />
- foldl' :: (b -> a -> b) -> b -> [a] -> b<br />
+ foldl' :: Foldable t => (b -> a -> b) -> b -> t a -> b<br />
- foldl1 :: (a -> a -> a) -> [a] -> a<br />
+ foldl1 :: Foldable t => (a -> a -> a) -> t a -> a<br />
- foldr :: (a -> b -> b) -> b -> [a] -> b<br />
+ foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b<br />
- foldr1 :: (a -> a -> a) -> [a] -> a<br />
+ foldr1 :: Foldable t => (a -> a -> a) -> t a -> a<br />
+ isSubsequenceOf :: (Eq a) => [a] -> [a] -> Bool<br />
- length :: [a] -> Int<br />
+ length :: Foldable t => t a -> Int<br />
- mapAccumL :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])<br />
+ mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c)<br />
- mapAccumR :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])<br />
+ mapAccumR :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c)<br />
- maximum :: Ord a => [a] -> a<br />
+ maximum :: (Foldable t, Ord a) => t a -> a<br />
- maximumBy :: (a -> a -> Ordering) -> [a] -> a<br />
+ maximumBy :: Foldable t => (a -> a -> Ordering) -> t a -> a<br />
- minimum :: Ord a => [a] -> a<br />
+ minimum :: (Foldable t, Ord a) => t a -> a<br />
- minimumBy :: (a -> a -> Ordering) -> [a] -> a<br />
+ minimumBy :: Foldable t => (a -> a -> Ordering) -> t a -> a<br />
- notElem :: Eq a => a -> [a] -> Bool<br />
+ notElem :: (Foldable t, Eq a) => a -> t a -> Bool<br />
- null :: [a] -> Bool<br />
+ null :: Foldable t => t a -> Bool<br />
- or :: [Bool] -> Bool<br />
+ or :: Foldable t => t Bool -> Bool<br />
- product :: Num a => [a] -> a<br />
+ product :: (Foldable t, Num a) => t a -> a<br />
+ scanl' :: (b -> a -> b) -> b -> [a] -> [b]<br />
+ sortOn :: Ord b => (a -> b) -> [a] -> [a]<br />
- sum :: Num a => [a] -> a<br />
+ sum :: (Foldable t, Num a) => t a -> a<br />
+ uncons :: [a] -> Maybe (a, [a])<br />
<br />
Prelude<br />
- all :: (a -> Bool) -> [a] -> Bool<br />
+ all :: Foldable t => (a -> Bool) -> t a -> Bool<br />
- and :: [Bool] -> Bool<br />
+ and :: Foldable t => t Bool -> Bool<br />
- any :: (a -> Bool) -> [a] -> Bool<br />
+ any :: Foldable t => (a -> Bool) -> t a -> Bool<br />
+ class Monoid a<br />
+ class Foldable t<br />
+ class (Functor t, Foldable t) => Traversable t<br />
- concat :: [[a]] -> [a]<br />
+ concat :: Foldable t => t [a] -> [a]<br />
- concatMap :: (a -> [b]) -> [a] -> [b]<br />
+ concatMap :: Foldable t => (a -> [b]) -> t a -> [b]<br />
- elem :: Eq a => a -> [a] -> Bool<br />
+ elem :: (Foldable t, Eq a) => a -> t a -> Bool<br />
+ foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m<br />
- foldl :: (b -> a -> b) -> b -> [a] -> b<br />
+ foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b<br />
- foldl1 :: (a -> a -> a) -> [a] -> a<br />
+ foldl1 :: Foldable t => (a -> a -> a) -> t a -> a<br />
- foldr :: (a -> b -> b) -> b -> [a] -> b<br />
+ foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b<br />
- foldr1 :: (a -> a -> a) -> [a] -> a<br />
+ foldr1 :: Foldable t => (a -> a -> a) -> t a -> a<br />
- length :: [a] -> Int<br />
+ length :: Foldable t => t a -> Int<br />
- mapM :: Monad m => (a -> m b) -> [a] -> m [b]<br />
+ mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)<br />
- mapM_ :: Monad m => (a -> m b) -> [a] -> m ()<br />
+ mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()<br />
+ mappend :: Monoid a => a -> a -> a<br />
- maximum :: Ord a => [a] -> a<br />
+ maximum :: (Foldable t, Ord a) => t a -> a<br />
+ mconcat :: Monoid a => [a] -> a<br />
+ mempty :: Monoid a => a<br />
- minimum :: Ord a => [a] -> a<br />
+ minimum :: (Foldable t, Ord a) => t a -> a<br />
- notElem :: Eq a => a -> [a] -> Bool<br />
+ notElem :: (Foldable t, Eq a) => a -> t a -> Bool<br />
- null :: [a] -> Bool<br />
+ null :: Foldable t => t a -> Bool<br />
- or :: [Bool] -> Bool<br />
+ or :: Foldable t => t Bool -> Bool<br />
- product :: Num a => [a] -> a<br />
+ product :: (Foldable t, Num a) => t a -> a<br />
- sequence :: Monad m => [m a] -> m [a]<br />
+ sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)<br />
+ sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)<br />
- sequence_ :: Monad m => [m a] -> m ()<br />
+ sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()<br />
- sum :: Num a => [a] -> a<br />
+ sum :: (Foldable t, Num a) => t a -> a<br />
+ traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)<br />
<br />
Data.Foldable<br />
+ length :: Foldable t => t a -> Int<br />
+ null :: Foldable t => t a -> Bool<br />
</nowiki><br />
<br />
Additionally, <code>toList</code>, <code>elem</code>, <code>sum</code>, <code>product</code>, <code>maximum</code>, and <code>minimum</code>, before given as methods on <code>Foldable</code> items are now optional methods in the <code>Foldable</code> class.<br />
<br />
Finally, note that the addition of <code>length</code>, <code>null</code>, <code>toList</code>, and <code>elem</code> to <code>Foldable</code> are technically a separate proposal but are often discussed in conjunction with the FTP. Meanwhile the addition of <code>sum</code>, <code>product</code>, <code>maximum</code>, and <code>minimum</code> are considered part of the FTP, as will be discussed below.<br />
<br />
== Wow, that's a lot of changes! ==<br />
<br />
Well, yes and no. As you can see, these changes are all essentially strict generalizations of existing functions, which was indeed the goal.<br />
<br />
== But, why does Control.Monad also generalize its functions? ==<br />
<br />
Many people import Control.Monad unqualified. If we continued to export the monomorphic functions from Control.Monad, this would lead to many clashes, and much code would break. Now, all that remaining code still works!<br />
<br />
We could instead drop those functions from Control.Monad instead of reexporting their more polymorphic versions. But this would cause breakages for those who imported them explicitly or qualified. Now that code still works too!<br />
<br />
== But, why does Data.List also generalize its functions? ==<br />
<br />
Many people import Data.List unqualified. If we continued to export the monomorphic functions from Data.List, this would lead to many clashes, and much code would break. Now, all that remaining code still works!<br />
<br />
We could instead drop those functions from Data.List instead of reexporting their more polymorphic versions. But this would cause breakages for those who imported them explicitly or qualified. Now that code still works too!<br />
<br />
== OK, but why does the Foldable class have so many methods in it? ==<br />
<br />
Well, Foldable cannot just be given by toList, much as we might think of it as such. foldMap lets us fold over not only potentially right-infinite structures as with foldr, but potentially left-infinite ones (as with foldl) and even "both-infinite" ones such as rooted but infinitely branching trees!<br />
<br />
Other methods in the Foldable class, such as foldl and foldr exist for historical reasons, and to allow the possibility of more efficient implementations. Sum, product, maximum, and minimum were added because their prelude versions were performed with a foldl, while their general versions with a foldMap. Moving them into the class allowed Prelude behaviour to be preserved in the case of lists without altering behaviour otherwise in the case of other structures. This has led to the one semantic change in the FTP -- now that these Foldable methods on lists are in accord with the Prelude specification, this means that (unavoidably) their Foldable methods on lists have now changed behaviour.<br />
<br />
Finally, toList and elem were pulled into the class and length and null were added to both the module and the class because they permit potentially more efficient implementations on many structures (with null and length being sometimes, for example O(1)), and it seemed desirable to allow users to take advantage of this asymptotically more efficient behaviour.<br />
<br />
== Now I'm getting unused import warnings. Help? ==<br />
<br />
Suppose your code had <code>import Foldable</code> in it, but you only used things that are now available from the prelude. After the FTP you'll be getting unused import warnings.<br />
<br />
You can go delete the import, but now your code doesn't work for pre-FTP versions! There is a trick to avoid these warnings while remaining compatible across versions. <br />
<br />
Stick <code>import Prelude</code> at the '''bottom''' of your imports list.<br />
<br />
This works because GHC checks that the imports provide something "new" that is used by the module in a top-down fashion, and you are almost certainly using something from Prelude that didn't come from one of the modules above.<br />
<br />
[[Category:FAQ]]<br />
[[Category:How to]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Haskell_projects_needing_help&diff=59152Haskell projects needing help2014-12-12T02:42:50Z<p>Mikolaj: /* LambdaHack, a game engine library for roguelike dungeon crawlers */</p>
<hr />
<div><br />
== Introduction ==<br />
<br />
There are often people looking for useful projects to do and there are always projects needing help. This page is meant to bring people and projects together.<br />
Anyone with a Haskell project needing help, can add their project to this page.<br />
<br />
<br />
== wxHaskell == <br />
<br />
wxHaskell is a portable and native GUI library for Haskell. The goal of<br />
the project is to provide an industrial strength GUI library for Haskell,<br />
but without the burden of developing (and maintaining) one ourselves.<br />
<br />
wxHaskell is therefore built on top of wxWidgets: a comprehensive C++<br />
library that is portable across all major GUI platforms; including GTK,<br />
Windows, X11, and MacOS X. Furthermore, it is a mature library (in<br />
development since 1992) that supports a wide range of widgets with the<br />
native look-and-feel.<br />
<br />
<br />
=== What can be done? ===<br />
<br />
Some of the activities:<br />
* Solving [http://sourceforge.net/p/wxhaskell/bugs/?q=%7B%22status%22%3A+%7B%22%24nin%22%3A+%5B%22wont-fix%22%2C+%22closed-later%22%2C+%22closed-rejected%22%2C+%22closed-out-of-date%22%2C+%22closed-accepted%22%2C+%22closed-works-for-me%22%2C+%22closed%22%2C+%22closed-fixed%22%5D%7D%7D&limit=25&page=0&sort=_priority%20asc&filter=%7B%7D&columns-0.name=ticket_num&columns-0.sort_name=ticket_num&columns-0.label=Ticket%20Number&columns-0.active=on&columns-1.name=summary&columns-1.sort_name=summary&columns-1.label=Summary&columns-1.active=on&columns-2.name=_milestone&columns-2.sort_name=custom_fields._milestone&columns-2.label=Milestone&columns-2.active=on&columns-3.name=status&columns-3.sort_name=status&columns-3.label=Status&columns-3.active=on&columns-4.name=assigned_to&columns-4.sort_name=assigned_to_username&columns-4.label=Owner&columns-4.active=on&columns-5.name=reported_by&columns-5.sort_name=reported_by&columns-5.label=Creator&columns-5.active=&columns-6.name=created_date&columns-6.sort_name=created_date&columns-6.label=Created&columns-6.active=on&columns-7.name=mod_date&columns-7.sort_name=mod_date&columns-7.label=Updated&columns-7.active=on&columns-8.name=labels&columns-8.sort_name=labels&columns-8.label=Labels&columns-8.active=&columns-9.name=_priority&columns-9.sort_name=_priority&columns-9.label=Priority&columns-9.active=on bugs]<br />
<br />
* Adding [http://sourceforge.net/p/wxhaskell/feature-requests/?q=%7B%22status%22%3A+%7B%22%24nin%22%3A+%5B%22wont-fix%22%2C+%22closed%22%5D%7D%7D&limit=25&page=0&sort=_priority%20asc&filter=%7B%7D&columns-0.name=ticket_num&columns-0.sort_name=ticket_num&columns-0.label=Ticket%20Number&columns-0.active=on&columns-1.name=summary&columns-1.sort_name=summary&columns-1.label=Summary&columns-1.active=on&columns-2.name=_milestone&columns-2.sort_name=custom_fields._milestone&columns-2.label=Milestone&columns-2.active=on&columns-3.name=status&columns-3.sort_name=status&columns-3.label=Status&columns-3.active=on&columns-4.name=assigned_to&columns-4.sort_name=assigned_to_username&columns-4.label=Owner&columns-4.active=on&columns-5.name=reported_by&columns-5.sort_name=reported_by&columns-5.label=Creator&columns-5.active=&columns-6.name=created_date&columns-6.sort_name=created_date&columns-6.label=Created&columns-6.active=on&columns-7.name=mod_date&columns-7.sort_name=mod_date&columns-7.label=Updated&columns-7.active=on&columns-8.name=labels&columns-8.sort_name=labels&columns-8.label=Labels&columns-8.active=&columns-9.name=_priority&columns-9.sort_name=_priority&columns-9.label=Priority&columns-9.active=on new features]<br />
<br />
* Writing [https://github.com/wxHaskell/wxHaskell/tree/master/samples sample programs] for testing and teaching (for functionality not used in sample programs so far)<br />
<br />
* Simplifying installation (e.g. creating a wxWidgets/wxHaskell binary package with installation program). Scripts, used in the passed for this, can be found on [https://github.com/wxHaskell/wxHaskell/tree/master/bin GitHub], old binary package are at [http://wxhaskell.sourceforge.net/download.html SourceForge].<br />
<br />
* Add/improve descriptions of the wxHaskell API in the source code (include usage samples)<br />
<br />
* Write a manual, similar to the [http://docs.wxwidgets.org/stable/ wxWidgets manual]<br />
<br />
* Trying wxHaskell on Android and other new platforms<br />
<br />
* Testing<br />
<br />
* Updating the HaskellWiki pages<br />
<br />
<br />
=== Links ===<br />
<br />
* [[WxHaskell]]<br />
<br />
* [http://sourceforge.net/p/wxhaskell/_list/tickets Bug tickets and feature requests]<br />
<br />
* [[WxHaskell/Development]]<br />
<br />
* [https://github.com/wxHaskell/wxHaskell The wxHaskell project on GitHub]<br />
<br />
<br />
== Diagrams ==<br />
<br />
* [[Diagrams]]<br />
* [https://www.haskell.org/haskellwiki/Diagrams/Projects List of projects]<br />
* [http://projects.haskell.org/diagrams/ Home page]<br />
<br />
<br />
== GHC backend for JVM/.NET ==<br />
<br />
There is no such project currently going on, but someone should start it. It probably needs several people to make sure that the project will run to till completion. The most important information about this can be found at [https://www.haskell.org/haskellwiki/GHC/FAQ#.NET.2FJVM_Availability GHC/FAQ 1.5 .NET/JVM Availability]<br />
<br />
== Games, procedurally generated art, game engines, game libraries, toys, demos ==<br />
<br />
In case you are after something more light-hearted...<br />
<br />
=== LambdaHack, a game engine library for roguelike dungeon crawlers ===<br />
<br />
Written in a rather antiquated style (e.g., GADTs only just introduced, FRP planned). Needs tons of help from gurus and newbies alike, see the issue tracker at https://github.com/LambdaHack/LambdaHack/. Apart of improving the engine, a useful (and fun!) endeavour is to write yet another game with it (e.g., the classic high fantasy setting is yet unclaimed, just as (as far as the engine permits) faithful reimplementations of NetHack/Angband/etc.). Beware, however, the engine is a fast moving target and also you'll quite likely be lured into engine hacking regardless of your focus on game content.<br />
<br />
<br />
[[Category:Community]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Haskell_projects_needing_help&diff=59151Haskell projects needing help2014-12-12T02:30:59Z<p>Mikolaj: Add the game section and LambdaHack</p>
<hr />
<div><br />
== Introduction ==<br />
<br />
There are often people looking for useful projects to do and there are always projects needing help. This page is meant to bring people and projects together.<br />
Anyone with a Haskell project needing help, can add their project to this page.<br />
<br />
<br />
== wxHaskell == <br />
<br />
wxHaskell is a portable and native GUI library for Haskell. The goal of<br />
the project is to provide an industrial strength GUI library for Haskell,<br />
but without the burden of developing (and maintaining) one ourselves.<br />
<br />
wxHaskell is therefore built on top of wxWidgets: a comprehensive C++<br />
library that is portable across all major GUI platforms; including GTK,<br />
Windows, X11, and MacOS X. Furthermore, it is a mature library (in<br />
development since 1992) that supports a wide range of widgets with the<br />
native look-and-feel.<br />
<br />
<br />
=== What can be done? ===<br />
<br />
Some of the activities:<br />
* Solving [http://sourceforge.net/p/wxhaskell/bugs/?q=%7B%22status%22%3A+%7B%22%24nin%22%3A+%5B%22wont-fix%22%2C+%22closed-later%22%2C+%22closed-rejected%22%2C+%22closed-out-of-date%22%2C+%22closed-accepted%22%2C+%22closed-works-for-me%22%2C+%22closed%22%2C+%22closed-fixed%22%5D%7D%7D&limit=25&page=0&sort=_priority%20asc&filter=%7B%7D&columns-0.name=ticket_num&columns-0.sort_name=ticket_num&columns-0.label=Ticket%20Number&columns-0.active=on&columns-1.name=summary&columns-1.sort_name=summary&columns-1.label=Summary&columns-1.active=on&columns-2.name=_milestone&columns-2.sort_name=custom_fields._milestone&columns-2.label=Milestone&columns-2.active=on&columns-3.name=status&columns-3.sort_name=status&columns-3.label=Status&columns-3.active=on&columns-4.name=assigned_to&columns-4.sort_name=assigned_to_username&columns-4.label=Owner&columns-4.active=on&columns-5.name=reported_by&columns-5.sort_name=reported_by&columns-5.label=Creator&columns-5.active=&columns-6.name=created_date&columns-6.sort_name=created_date&columns-6.label=Created&columns-6.active=on&columns-7.name=mod_date&columns-7.sort_name=mod_date&columns-7.label=Updated&columns-7.active=on&columns-8.name=labels&columns-8.sort_name=labels&columns-8.label=Labels&columns-8.active=&columns-9.name=_priority&columns-9.sort_name=_priority&columns-9.label=Priority&columns-9.active=on bugs]<br />
<br />
* Adding [http://sourceforge.net/p/wxhaskell/feature-requests/?q=%7B%22status%22%3A+%7B%22%24nin%22%3A+%5B%22wont-fix%22%2C+%22closed%22%5D%7D%7D&limit=25&page=0&sort=_priority%20asc&filter=%7B%7D&columns-0.name=ticket_num&columns-0.sort_name=ticket_num&columns-0.label=Ticket%20Number&columns-0.active=on&columns-1.name=summary&columns-1.sort_name=summary&columns-1.label=Summary&columns-1.active=on&columns-2.name=_milestone&columns-2.sort_name=custom_fields._milestone&columns-2.label=Milestone&columns-2.active=on&columns-3.name=status&columns-3.sort_name=status&columns-3.label=Status&columns-3.active=on&columns-4.name=assigned_to&columns-4.sort_name=assigned_to_username&columns-4.label=Owner&columns-4.active=on&columns-5.name=reported_by&columns-5.sort_name=reported_by&columns-5.label=Creator&columns-5.active=&columns-6.name=created_date&columns-6.sort_name=created_date&columns-6.label=Created&columns-6.active=on&columns-7.name=mod_date&columns-7.sort_name=mod_date&columns-7.label=Updated&columns-7.active=on&columns-8.name=labels&columns-8.sort_name=labels&columns-8.label=Labels&columns-8.active=&columns-9.name=_priority&columns-9.sort_name=_priority&columns-9.label=Priority&columns-9.active=on new features]<br />
<br />
* Writing [https://github.com/wxHaskell/wxHaskell/tree/master/samples sample programs] for testing and teaching (for functionality not used in sample programs so far)<br />
<br />
* Simplifying installation (e.g. creating a wxWidgets/wxHaskell binary package with installation program). Scripts, used in the passed for this, can be found on [https://github.com/wxHaskell/wxHaskell/tree/master/bin GitHub], old binary package are at [http://wxhaskell.sourceforge.net/download.html SourceForge].<br />
<br />
* Add/improve descriptions of the wxHaskell API in the source code (include usage samples)<br />
<br />
* Write a manual, similar to the [http://docs.wxwidgets.org/stable/ wxWidgets manual]<br />
<br />
* Trying wxHaskell on Android and other new platforms<br />
<br />
* Testing<br />
<br />
* Updating the HaskellWiki pages<br />
<br />
<br />
=== Links ===<br />
<br />
* [[WxHaskell]]<br />
<br />
* [http://sourceforge.net/p/wxhaskell/_list/tickets Bug tickets and feature requests]<br />
<br />
* [[WxHaskell/Development]]<br />
<br />
* [https://github.com/wxHaskell/wxHaskell The wxHaskell project on GitHub]<br />
<br />
<br />
== Diagrams ==<br />
<br />
* [[Diagrams]]<br />
* [https://www.haskell.org/haskellwiki/Diagrams/Projects List of projects]<br />
* [http://projects.haskell.org/diagrams/ Home page]<br />
<br />
<br />
== GHC backend for JVM/.NET ==<br />
<br />
There is no such project currently going on, but someone should start it. It probably needs several people to make sure that the project will run to till completion. The most important information about this can be found at [https://www.haskell.org/haskellwiki/GHC/FAQ#.NET.2FJVM_Availability GHC/FAQ 1.5 .NET/JVM Availability]<br />
<br />
== Games, procedurally generated art, game engines, game libraries, toys, demos ==<br />
<br />
In case you are after something more light-hearted...<br />
<br />
=== LambdaHack, a game engine library for roguelike dungeon crawlers ===<br />
<br />
Written in a rather antiquated style (e.g., GADTs only just introduced, FRP planned). Needs tons of help from gurus and newbies alike, see the issue tracker at https://github.com/LambdaHack/LambdaHack/. Apart of improving the engine, a useful (and fun!) endeavour is to write yet another game with it (e.g., the classic high fantasy setting is yet unclaimed, just as faithful reimplementations of NetHack/Angband/etc.). Beware, however, the engine is a fast moving target and also you'll quite likely be lured into engine hacking regardless of your focus on game content.<br />
<br />
<br />
[[Category:Community]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58992GHC under Wine2014-10-13T07:28:31Z<p>Mikolaj: /* Code that uses gtk2hs */ Don't mention a problem that is not caused by gtk2hs in fact</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386, HP 2014.2.0.0 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386, HP 2014.2.0.0, gtk2hs 0.13 and http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip) one needs to use the flag -f-fmode-binary, as described at [https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472 the following ticket].<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
If the code uses TH together with some external DLLs (e.g., gtk), it may have trouble finding library files, e.g., as reported at [https://ghc.haskell.org/trac/ghc/ticket/9553 #9553]. If so, a workaround similar to the one described in the ticket may help sidestep the problem for now.<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58755GHC under Wine2014-09-04T21:22:31Z<p>Mikolaj: /* Code that uses gtk2hs */</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386, HP 2014.2.0.0 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386, HP 2014.2.0.0, gtk2hs 0.13 and http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip) one needs to use the flag -f-fmode-binary, as described at [https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472 the following ticket].<br />
<br />
When compiling a program that depends on gtk2hs packages, [https://github.com/gtk2hs/gtk2hs/issues/52 a problem may be encountered], leading to the following error mesasge.<br />
<br />
setup-Cabal-1.18.1.3-i386-windows-ghc-7.8.3.exe: The pkg-config package x11 is required but it could not be found<br />
<br />
The hacky workaround below solves this problem for gtk2hs 0.13. <br />
<br />
cp ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/fontconfig.pc ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/x11.pc<br />
<br />
The same problem appears and the same workaround works on Windows Vista, so it's not Wine-specific.<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
If the code uses TH together with some external DLLs (e.g., gtk), it may have trouble finding library files, e.g., as reported at [https://ghc.haskell.org/trac/ghc/ticket/9553 #9553]. If so, a workaround similar to the one described in the ticket may help sidestep the problem for now.<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58754GHC under Wine2014-09-04T19:50:13Z<p>Mikolaj: /* Code that uses Template Haskell */</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386, HP 2014.2.0.0 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386, HP 2014.2.0.0 and gtk2hs 0.13) one needs to use the flag -f-fmode-binary, as described at [https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472 the following ticket].<br />
<br />
When compiling a program that depends on gtk2hs packages, [https://github.com/gtk2hs/gtk2hs/issues/52 a problem may be encountered], leading to the following error mesasge.<br />
<br />
setup-Cabal-1.18.1.3-i386-windows-ghc-7.8.3.exe: The pkg-config package x11 is required but it could not be found<br />
<br />
The hacky workaround below solves this problem for gtk2hs 0.13. <br />
<br />
cp ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/fontconfig.pc ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/x11.pc<br />
<br />
The same problem appears and the same workaround works on Windows Vista, so it's not Wine-specific.<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
If the code uses TH together with some external DLLs (e.g., gtk), it may have trouble finding library files, e.g., as reported at [https://ghc.haskell.org/trac/ghc/ticket/9553 #9553]. If so, a workaround similar to the one described in the ticket may help sidestep the problem for now.<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58753GHC under Wine2014-09-04T19:43:12Z<p>Mikolaj: /* Code that uses gtk2hs */</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386, HP 2014.2.0.0 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386, HP 2014.2.0.0 and gtk2hs 0.13) one needs to use the flag -f-fmode-binary, as described at [https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472 the following ticket].<br />
<br />
When compiling a program that depends on gtk2hs packages, [https://github.com/gtk2hs/gtk2hs/issues/52 a problem may be encountered], leading to the following error mesasge.<br />
<br />
setup-Cabal-1.18.1.3-i386-windows-ghc-7.8.3.exe: The pkg-config package x11 is required but it could not be found<br />
<br />
The hacky workaround below solves this problem for gtk2hs 0.13. <br />
<br />
cp ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/fontconfig.pc ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/x11.pc<br />
<br />
The same problem appears and the same workaround works on Windows Vista, so it's not Wine-specific.<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
If the code uses TH and some external libraries (e.g., gtk), it make have trouble finding libraries, e.g., as reported at [https://ghc.haskell.org/trac/ghc/ticket/9553 #9553]. If so, a workaround similar to the one described in the ticket may help sidestep the problem for now.<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58752GHC under Wine2014-09-04T19:37:59Z<p>Mikolaj: /* Known problems */</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386, HP 2014.2.0.0 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386, HP 2014.2.0.0 and gtk2hs 0.13) one needs to use the flag -f-fmode-binary, as described at [https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472 the following ticket].<br />
<br />
However, sometimes the [https://github.com/gtk2hs/gtk2hs/issues/52 following problem is encountered] when compiling a program that uses gtk2hs<br />
<br />
setup-Cabal-1.18.1.3-i386-windows-ghc-7.8.3.exe: The pkg-config package x11 is required but it could not be found<br />
<br />
The hacky workaround below solves this problem for gtk2hs 0.13. The same problem appears on Windows Vista, so it's not Wine-specific.<br />
<br />
cp ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/fontconfig.pc ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/x11.pc<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
If the code uses TH and some external libraries (e.g., gtk), it make have trouble finding libraries, e.g., as reported at [https://ghc.haskell.org/trac/ghc/ticket/9553 #9553]. If so, a workaround similar to the one described in the ticket may help sidestep the problem for now.<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=GHC_under_Wine&diff=58751GHC under Wine2014-09-04T18:36:51Z<p>Mikolaj: /* Known problems */</p>
<hr />
<div>[[Category:GHC]]<br />
[[Category:How to]]<br />
[[Category:OS]]<br />
[[GHC]] runs flawlessly under Wine. Here's a guide on how to get it working.<br />
==Installation==<br />
First, get the latest stable version of Wine from your distribution's repository, or from http://www.winehq.com/site/download.<br />
For Mac users, WineBottler works well.<br />
<br />
Next, grab the latest [[Windows]] version of Haskell Platform from http://www.haskell.org/platform/windows.html<br />
Installing Haskell is as simple as typing: <code>wine HaskellPlatform-2012.4.0.0-setup.exe</code><br />
<br />
Once this is all done, you should be good to start using GHC.<br />
<br />
==Testing==<br />
<br />
Create a simple haskell program to compile. Hello World examples are good. Try compiling it:<br/><br />
<code><pre>$ WINEDEBUG=-all wine ghc --make hello.hs<br />
[1 of 1] Compiling Main ( hello.hs, hello.o )<br />
Linking ...<br />
</pre></code><br />
<br />
<code><pre>$ wine hello<br />
Hello, world!<br />
</pre></code><br />
<br />
If it all works well then you should be able to compile your Haskell programs for windows with GHC on Wine.<br />
<br />
If you encounter specific, reproducible issues that are present in the latest release of wine you should file a bug report with the Wine project http://bugs.winehq.org (so long as one doesn't already exist for the issue)<br />
<br />
== Known problems ==<br />
<br />
* MSYS does not integrate with MinGW correctly - [http://bugs.winehq.org/show_bug.cgi?id=15949 See Wine bug 15949]<br />
* removeDirectoryRecursive did not work correctly prior to wine-1.1.4-538-g2e8dec4. This most notably broke cabal install. '''Use Wine 1.1.5 or newer.'''<br />
* GHC 6.12.3, Wine 1.2 (from WineBottler) on mac osx leopard: GHC's mingw/bin/gcc.exe exits with a "spawnv failed: errno 2: No such file or directory" error, which breaks cabal install. To work around, replace gcc.exe with a renamed copy of g++.exe, also in that directory ("ghc\bin\mingw> copy g++.exe gcc.exe").<br />
* ghci appears to not work at all on Wine-1.4/Linux-x86, but works OK on Wine-1.7.18/i386 and Ubuntu 12.04.5/x86_64.<br />
<br />
===Native DLLs===<br />
Wine isn't perfect (yet) but does offer a solution for using native dlls, as an alternative to builtin dlls if certain functions are not implemented or are buggy and not yet fixed. To configure this use winecfg where you can specify settings for the ordering of preferences for loading dlls, Builtin only, Native only, Builtin then Native and Native then Builtin.<br />
<br />
[http://wiki.winehq.org/winetricks winetricks] can be useful for installing common native dlls or software<br />
<br />
=== Code that uses gtk2hs ===<br />
<br />
First, install GTK from http://www.gtk.org/download/win32.php, according to the instructions from http://www.haskell.org/haskellwiki/Gtk2Hs/Installation#Windows. For compilation of gtk, sometimes (e.g., on Ubuntu 12.04.5/x86_64 with Wine-1.7.18/i386 and gtk2hs 0.13) one needs to use the flag -f-fmode-binary, as described on https://github.com/gtk2hs/gtk2hs/issues/23#issuecomment-40895472.<br />
<br />
However, sometimes the [https://github.com/gtk2hs/gtk2hs/issues/52 following problem is encountered] when compiling a program that uses gtk2hs<br />
<br />
setup-Cabal-1.18.1.3-i386-windows-ghc-7.8.3.exe: The pkg-config package x11 is required but it could not be found<br />
<br />
The hacky workaround below solved this problem for gtk2hs 0.13. hHe same problem appears on Windows Vista, so it's not Wine-specific.<br />
<br />
cp ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/fontconfig.pc ~/.wine/drive_c/users/mikolaj/gtk/lib/pkgconfig/x11.pc<br />
<br />
=== Code that uses Template Haskell ===<br />
<br />
TODO<br />
<br />
==Debugging==<br />
<br />
You can enable tracing of various components within Wine to aid in debugging issues with Wine by using [http://wiki.winehq.org/DebugChannels Wine Debug Channels].<br />
<br />
==External Links==<br />
<br />
[http://appdb.winehq.org/objectManager.php?sClass=application&iId=6691 GHC at the Wine AppDB]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=58326Applications and libraries/Games2014-06-12T21:50:19Z<p>Mikolaj: /* Unfinished/in-progress game engines/libraries */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.increpare.com/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[http://mfuglos.github.io/jeopardy Fuglos Jeopardy]<br />
:Fuglos Jeopardy is a free implementation of a game resembling the popular quiz show 'Jeopardy'. It is written using Gtk2Hs as GUI toolkit. It is quite feature complete and easy to use. It contains support for LaTeX, so you can for example use LaTeX math syntax in your data sheets and thus organize a math jeopoardy event. Licensed under GPL3.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hex, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://www.cs.ox.ac.uk/people/ian.lynagh/Hetris/ Hetris]<br />
:ASCII Tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://quasimal.com/projects/level_0.html Level 0]<br />
:A fun and featureful Snake II clone using SDL.<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius Hackage]; see also the [http://www.youtube.com/watch?v=zqFgQiPKtOI video])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game.<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbworks.com/w/page/16967421/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[https://github.com/nbartlomiej/tfoo Tfoo]<br />
:A simple Five in a Row game. Online, with server-sent events, deployed to [http://tfoo.herokuapp.com/ Heroku], open source.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
;{{HackagePackage | id =Yogurt}}<br />
:A functional MUD client featuring prioritized, regex-based hooks, variables, timers, logging, dynamic loading of Yogurt scripts and more. For example programs, please see [http://code.google.com/p/yogurt-mud/ Yogurt's home page]. <br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[http://allureofthestars.com Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://hackage.haskell.org/package/free-game free-game]<br />
:A GUI/game library based on free monads.<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/sordina/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/sordina/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/sordina/fungen/browse/examples/worms/worms.hs games], in Haskell. Example code: [http://joyful.com/fungen/old-site/example.html A Brief Example]. Forks and patches welcome!<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://gloss.ouroborus.net/ Gloss]<br />
:An OpenGL abstraction layer supporting game-style main loops.<br />
<br />
;[https://github.com/haskell-game haskell-game]<br />
:A project to make game development with Haskell easier to get started with by providing a suite of libraries for covering all sorts of aspects of game development.<br />
<br />
;[http://helm-engine.org/ Helm]<br />
:A functionally reactive game engine inspired by [http://elm-lang.org/ Elm].<br />
<br />
;[http://hackage.haskell.org/package/HGamer3D HGamer3D]<br />
:A game engine for Windows which includes Haskell bindings to a couple of C++ libraries and a Haskell API on top of that. Features include Audio, Joystick, Mouse and Keyboard handling, GUI, Network, Physics, 3D graphics. <br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://chipmunk-physics.net/ Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://lambdacube3d.wordpress.com/ LambdaCube 3D]<br />
:LambdaCube 3D is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/keera-studios/gtk-helpers gtk-helpers]<br />
:A collection of auxiliary operations related to Gtk2hs. See also [http://keera.co.uk/blog/2013/03/19/creating-board-games-in-haskell/ Creating board games in Haskell in 100 lines of code]<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/LambdaHack/LambdaHack LambdaHack]<br />
:A game engine library for roguelike games of arbitrary theme, size and complexity, packaged together with a small example dungeon crawler. When completed, it will let you specify content to be procedurally generated, define the AI behaviour on top of the generic content-independent rules and compile a ready-to-play game binary, using either the supplied or a custom-made main loop. Several frontends are available (GTK is the default) and many other generic engine components are easily overridden, but the fundamental source of flexibility lies in the strict and type-safe separation of code and content.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=58102ThreadScope2014-05-16T10:58:52Z<p>Mikolaj: /* Development and reporting bugs */</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then<br />
<br />
cabal update<br />
gtk-demo<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
Next, check out the user guide. We call it the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
=== Binary releases ===<br />
<br />
For Windows and OSX there are binary releases available:<br />
* Windows: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.zip threadscope-0.2.2.zip]<br />
* Mac OSX: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.dmg threadscope-0.2.2.dmg]<br />
<br />
If you use one of these, you are good to go and do not need anything else.<br />
<br />
=== Building from source ===<br />
<br />
If you're on another OS or adventurous, you can build ThreadScope from source.<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
=== Checking that ThreadScope works ===<br />
<br />
Once you installed ThreadScope, you can<br />
try to run it to make sure it works correctly<br />
by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
ThreadScope development takes place on<br />
[https://github.com/haskell/ThreadScope the ThreadScope github page].<br />
Please file your bug reports [https://github.com/haskell/ThreadScope/issues over there].<br />
<br />
The source for ghc-events and threadscope is available from github<br />
<br />
git clone git@github.com:haskell/ghc-events.git<br />
git clone git@github.com:haskell/ThreadScope.git<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=58101ThreadScope2014-05-16T10:58:36Z<p>Mikolaj: /* Development and reporting bugs */</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then<br />
<br />
cabal update<br />
gtk-demo<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
Next, check out the user guide. We call it the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
=== Binary releases ===<br />
<br />
For Windows and OSX there are binary releases available:<br />
* Windows: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.zip threadscope-0.2.2.zip]<br />
* Mac OSX: [http://projects.haskell.org/ThreadScope/threadscope-0.2.2.dmg threadscope-0.2.2.dmg]<br />
<br />
If you use one of these, you are good to go and do not need anything else.<br />
<br />
=== Building from source ===<br />
<br />
If you're on another OS or adventurous, you can build ThreadScope from source.<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
=== Checking that ThreadScope works ===<br />
<br />
Once you installed ThreadScope, you can<br />
try to run it to make sure it works correctly<br />
by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
ThreadScope development takes place on<br />
[https://github.com/haskell/ThreadScope the ThreadScope github page].<br />
Please file your bug reports [https://github.com/haskell/ThreadScope/issues over there].<br />
<br />
The source for ghc-events and threadscope is available from github<br />
<br />
get clone git@github.com:haskell/ghc-events.git<br />
get clone git@github.com:haskell/ThreadScope.git<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=57654Applications and libraries/Games2014-03-08T22:18:36Z<p>Mikolaj: /* Unfinished/in-progress games */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.increpare.com/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[http://mfuglos.github.io/jeopardy Fuglos Jeopardy]<br />
:Fuglos Jeopardy is a free implementation of a game resembling the popular quiz show 'Jeopardy'. It is written using Gtk2Hs as GUI toolkit. It is quite feature complete and easy to use. It contains support for LaTeX, so you can for example use LaTeX math syntax in your data sheets and thus organize a math jeopoardy event. Licensed under GPL3.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hex, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://www.cs.ox.ac.uk/people/ian.lynagh/Hetris/ Hetris]<br />
:ASCII Tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://quasimal.com/projects/level_0.html Level 0]<br />
:A fun and featureful Snake II clone using SDL.<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius Hackage]; see also the [http://www.youtube.com/watch?v=zqFgQiPKtOI video])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game.<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbworks.com/w/page/16967421/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[https://github.com/nbartlomiej/tfoo Tfoo]<br />
:A simple Five in a Row game. Online, with server-sent events, deployed to [http://tfoo.herokuapp.com/ Heroku], open source.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
;{{HackagePackage | id =Yogurt}}<br />
:A functional MUD client featuring prioritized, regex-based hooks, variables, timers, logging, dynamic loading of Yogurt scripts and more. For example programs, please see [http://code.google.com/p/yogurt-mud/ Yogurt's home page]. <br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[http://allureofthestars.com Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://hackage.haskell.org/package/free-game free-game]<br />
:A GUI/game library based on free monads.<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/sordina/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/sordina/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/sordina/fungen/browse/examples/worms/worms.hs games], in Haskell. Example code: [http://joyful.com/fungen/old-site/example.html A Brief Example]. Forks and patches welcome!<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://gloss.ouroborus.net/ Gloss]<br />
:An OpenGL abstraction layer supporting game-style main loops.<br />
<br />
;[https://github.com/haskell-game haskell-game]<br />
:A project to make game development with Haskell easier to get started with by providing a suite of libraries for covering all sorts of aspects of game development.<br />
<br />
;[http://helm-engine.org/ Helm]<br />
:A functionally reactive game engine inspired by [http://elm-lang.org/ Elm].<br />
<br />
;[http://hackage.haskell.org/package/HGamer3D HGamer3D]<br />
:A game engine for Windows which includes Haskell bindings to a couple of C++ libraries and a Haskell API on top of that. Features include Audio, Joystick, Mouse and Keyboard handling, GUI, Network, Physics, 3D graphics. <br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://chipmunk-physics.net/ Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://lambdacube3d.wordpress.com/ LambdaCube 3D]<br />
:LambdaCube 3D is a domain specific language and library that makes it possible to program GPUs in a purely functional style.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/keera-studios/gtk-helpers gtk-helpers]<br />
:A collection of auxiliary operations related to Gtk2hs. See also [http://keera.co.uk/blog/2013/03/19/creating-board-games-in-haskell/ Creating board games in Haskell in 100 lines of code]<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A game engine library for roguelike games of arbitrary theme, size and complexity, packaged together with a small example dungeon crawler. When completed, it will let you specify content to be procedurally generated, define the AI behaviour on top of the generic content-independent rules and compile a ready-to-play game binary, using either the supplied or a custom-made main loop. Several frontends are available (GTK is the default) and many other generic engine components are easily overridden, but the fundamental source of flexibility lies in the strict and type-safe separation of code and content.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=User_groups&diff=55748User groups2013-04-24T10:37:52Z<p>Mikolaj: /* Poland */</p>
<hr />
<div>[[Category:Community]]<br />
<br />
A range of Haskell User Groups are springing up all over.<br />
<br />
== Online communities ==<br />
* [http://www.reddit.com/r/haskell/ Haskell Reddit]<br />
* [http://stackoverflow.com/questions/tagged?tagnames=haskell Haskell on Stack Overflow]<br />
<br />
== User groups ==<br />
<br />
Regular meetings in a particular geographical area. Great if you want to see and meet other Haskellers.<br />
<br />
===North America===<br />
<br />
====West Coast ====<br />
<br />
;[http://socalfp.blogspot.com/ SoCal FP Group]<br />
<br />
;[http://bayfp.org/ The Bay Area Functional Programmers group]<br />
:Meeting monthly in the San Francisco Bay area. See [http://bayfp.org/blog their blog] for more details and news of upcoming meetings.<br />
<br />
;[http://pdxfunc.org PDXfunc: Portland FP Group]<br />
:Monthly meetings of the Portland, Oregon functional programming group. Meetings occur on the second Monday of each month at 7 pm, typically in Downtown/NW Portland.<br />
<br />
;[http://www.haskell.org/pipermail/haskell-cafe/2008-February/038991.html Seattle: Northwest Functional Programming Interest Group]<br />
:a Northwest Functional Programming Interest Group in Seattle.<br />
<br />
;[http://www.meetup.com/Vancouver-Haskell-Unmeetup/ Vancouver Haskell UnMeetup]<br />
:Monthly interactive sessions, (+10) for joining<br />
<br />
====East Coast====<br />
<br />
;[http://groups.google.com/group/bostonhaskell Boston Haskell Users' Group].<br />
:Meets monthly.<br />
<br />
;[http://www.meetup.com/NY-Haskell/ New York Haskell Users Group]<br />
:The NY Haskell Users Group is for all programmers either interested in or experienced with the Haskell programming language. Meets monthly.<br />
<br />
;[http://www.meetup.com/lisp-59/ New York Functional Programmers]<br />
:Come and meet like-minded functional programmers in the New York area.<br />
<br />
;[http://www.lisperati.com/fringedc.html FringeDC Washington]<br />
:Meetings about functional programming languages in Washington DC.<br />
<br />
;[http://groups.google.com/group/AFPUG Atlanta Functional Programming Users Group]<br />
:Meet other functional programmers in the Atlanta area. Join us and geek out!<br />
<br />
;Toronto Haskell User Group<br />
:Haskellers of Toronto, unite! We meet at [http://hacklab.to hacklab.to] on the second Wednesday of every month! There is also a small organizational [http://groups.google.com/group/toronto-haskell/ mailing list] you can join to keep up to date.<br />
<br />
;[https://groups.google.com/forum/?fromgroups#!forum/haskellers-montreal Montreal Haskell Users' Group].<br />
:Meets monthly.<br />
<br />
====Central====<br />
<br />
;[http://leibnizdream.wordpress.com/2007/12/22/new-austin-functional-programmers-group-in-2008/ Austin Functional Programmers Group]<br />
:See the [http://groups.google.com/group/austin-fp discussion group] for more.<br />
<br />
;[http://groups.google.com/group/real-world-haskell-book-club/browse_thread/thread/3e8e59768c8c50a9 Colorado Area Haskell Study Group]<br />
<br />
;[http://groups.google.com/group/haskell-chicago Chicago Haskell User Group] — new group, had first general meeting in December 2009; meeting every other month.<br />
<br />
;[http://www.meetup.com/DenHUG/ Denver Area Haskell Users Group] -- DenHUG had it's first meeting on 27 Feb 2010. Next meeting will be 3 Apr 2010.<br />
<br />
;[http://www.lambdalounge.org St. Louis Lambda Lounge] -- Meets the 1st Thursday of the month. Since Dec 2008, Lambda Lounge is a user group in St. Louis organized loosely around the idea of exploring dynamic and functional languages.<br />
<br />
===Australia===<br />
<br />
;[http://groups.google.com/group/fp-syd FP-SYD, the Sydney (Australia) Functional Programming group]<br />
:FP hackers in Sydney.<br />
<br />
;[http://sites.google.com/site/fpunion/ (FPU) Melbourne Functional Programming Union]<br />
:The FPU is a collective of functional programming language enthusiasts, which has been in operation since 1998. We are based at the University of Melbourne, in the Department of Computer Science and Software Engineering, but we are open to all members of the community. We meet on a regular basis for lively discussions on topics broadly associated with the declarative programming paradigm.<br />
<br />
;[http://bfpg.org/ Brisbane Functional Programming Group (BFPG)] ([http://www.meetup.com/Brisbane-Functional-Programming-Group-BFG/ Meetup page])<br />
:A group for Functional Programming with Haskell, Scala and other languages.<br />
<br />
;[http://meetup.com/PerthFP/ Perth Functional Programmers Meetup]<br />
:A group in Perth, WA for Functional Programming with Haskell, Scala and other languages.<br />
<br />
===Europe===<br />
<br />
==== UK ====<br />
;[http://www.meetup.com/hoodlums/ Hoodlums - Haskell developer meetup]<br />
:Meets monthly on the second Thursday of the month in Canary Wharf. It is a "Coding Dojo" format where we pick some interesting problem and solve it as a group. <br />
<br />
;[http://www.meetup.com/London-HUG/ London Haskell User Group]<br />
:The main meetings are monthly on the last or fourth Thursday of the month. The group was revived in late 2012.<br />
<br />
;[http://www.meetup.com/ed-lambda/ ed lambda (Edinburgh, UK)]<br />
:For functional programming in general, founded by a Haskeller. First meeting will be September 13th 2010.<br />
<br />
;[http://groups.google.com/group/oxhug OxHUG - the Oxford Haskell Users Group]<br />
:Meets every other week, currently at the Department of Computer Science, University of Oxford. Discussion session followed by adjournment to a local tavern. Aimed at students, graduates, professionals and enthusiasts.<br />
<br />
;[http://groups.google.com/group/fp-southwales fp-southwales], the South Wales Functional Programming User Group<br />
:Starting up in late 2009, based out of Swansea University.<br />
<br />
==== France ====<br />
<br />
;[[Fr/Haskell]]<br />
:The Strasbourg HUG meets monthly in an informal setting. Level is very low and newbies are very welcome.<br />
<br />
==== Netherlands ====<br />
<br />
;[http://dutchhug.nl/ Dutch HUG]<br />
:The Dutch HUG meets monthly in an informal setting.<br />
<br />
==== Belgium ====<br />
<br />
;[[Ghent Functional Programming Group]]<br />
:The Ghent Functional Programming Group will be having its first meeting on April 1, 2010.<br />
<br />
==== Germany ====<br />
<br />
;Haskell in Frankfurt<br />
: <ul><li>[http://www.meetup.com/Frankfurt-Haskell-User-Group Frankfurt Haskell User Group] meets monthly.</li><li> [http://wiki.lug-frankfurt.de/Programmierworkshop/aktuell Regular Saturday Workshop] taking place every couple of months. Feel free to join us!</li><br />
<br />
;[http://www.iba-cg.de/hal5.html Haskell in Leipzig]<br />
:Hal, they have videos [http://iba-cg.de/haskell.html online].<br />
<br />
;[http://www.haskell-munich.de Haskell in Munich]<br />
: We had our first meeting on Thursday, 29th of September 2011. We are always looking forward to see new people. If you can make it to Munich, consider joing us!<br />
<br />
''If anyone is interested in a user group in '''Ulm, Germany''' please let me know ([[HugUlm]]).''<br />
<br />
''If someone is interested in a user group in '''Mannheim or Heidelberg, Germany''', please let me know (user cgo [[http://www.haskell.org/haskellwiki/?title=Special:Emailuser&target=Cgo]] in this Wiki). Or<br />
if there is one which is not listed here, please let me know too!<br />
<br />
==== Switzerland ====<br />
<br />
;[http://www.meetup.com/HaskellerZ/ Haskell User Group Zurich]<br />
:We are meeting once a month to share knowledge of and experience with Haskell.<br />
<br />
==== Italy ====<br />
;[[ItaloHaskell]]<br />
:We had a first meeting in August 2008 and we are planning a second one sometime during the 2008/2009 Autumn/Winter season.<br />
<br />
==== Iceland ====<br />
<br />
;[[Reykjavik Haskell User Group]] Iceland<br />
;[http://groups.google.com/group/haskell-is Currently recruiting members]<br />
<br />
==== Poland ====<br />
;[https://plus.google.com/u/0/communities/103183708602453146804 HUG Warsaw] <br />
We are the successors to the Warsaw Functional Society (Warszawskie Towarzystwo Funkcyjne) and as such we welcome any functional programmers and enthusiasts, though the focus of the group is Haskell. We (hope to) have rather informal, but regular meetings in Warsaw, Poland.<br />
<br />
==== Ukraine ====<br />
;[https://groups.google.com/forum/#!forum/ltu-kiev LtU-Kiev community]<br />
:Irregular meetups, usually with prepared talks on Haskell and other FP topics.<br />
;[http://ro-che.info/odhug Odessa Haskell User Group]<br />
:Regular informal meetups (approximately once a month) in a pub or cafe<br />
<br />
=== Israel ===<br />
<br />
;[[IsraelHaskell]] User Group<br />
:[http://article.gmane.org/gmane.comp.lang.haskell.cafe/28877 Are getting organised].<br />
<br />
=== Russia ===<br />
<br />
;[http://spbhug.folding-maps.org Saint-Petersburg Haskell User Group]<br />
;[https://groups.google.com/forum/#!forum/mskhug Moscow Haskell User Group]<br />
<br />
=== Turkey ===<br />
<br />
;[http://groups.google.com/group/core-haskell?lnk=srg Turkey Haskell Programmer's Group]<br />
:Formed by Turkish Functional Programmers, the group began to communicate via an e-mail list opened by core.gen.tr. The first contribution is hlibev project by Aycan iRiCAN.<br />
<br />
;[http://bilfp.wikidot.com/ BILFP (Bilkent University Comp. Eng. Dept. Functional Programming Society)] Turkey <br />
:Project aims to improve people's knowledge and encourage the use of functional programming languages &mdash; especially in Turkey. Group is open to functional-programming-related discussions and establishes related presentations at Bilkent University that are open to anybody.<br />
<br />
===South America===<br />
<br />
====Brazil====<br />
;[[User_groups/Brazil|Grupo Brasileiro de Usuários de Haskell]]<br />
: Grupo criado para reunir os desenvolvedores e entusiastas que utilizam Haskell no Brasil<br />
<br />
==== Bolivia ====<br />
; [http://comunidadhaskell.org Comunidad Haskell San Simon]<br />
: Haskell user group for Bolivia and spanish speaking community<br />
<br />
===Asia===<br />
<br />
;[http://lisp.org.cn/en/ China Lisp User Group]<br />
:China Lisp User Group (CLUG) is the earliest founded Lisp user group in China. <br />
<br />
;[http://www.starling-software.com/en/tsac.html Tokyo Society for the Application of Currying]<br />
<br />
===Africa===<br />
<br />
====South Africa====<br />
; [http://www.meetup.com/lambda-luminaries/ Lambda Luminaries] : Functional programming user group based in Centurion, Gauteng.<br />
<br />
== Workshops/meet ups ==<br />
<br />
Less regular, and move around. Usually have a few talks from invited speakers.<br />
See the [[Haskell]] homepage for a list of upcoming events.<br />
<br />
== Hackathons ==<br />
<br />
Getting together to squash bugs and write new stuff. For a list of past and upcoming hackathons, see the [[Hackathon]] page.<br />
<br />
== Conferences ==<br />
<br />
See the [[Haskell_in_research#Conferences|Haskell in research]] and [[Conferences]] page for academic workshops and conferences<br />
focusing on Haskell and related technology.</div>Mikolajhttps://wiki.haskell.org/index.php?title=Parallel_GHC_Project&diff=54653Parallel GHC Project2012-11-13T09:39:53Z<p>Mikolaj: TS&perf update</p>
<hr />
<div>[[Category:Parallel]]<br />
<br />
== Overview ==<br />
<br />
The Parallel GHC Project is an [http://research.microsoft.com MSR]-funded project to push the real-world use of [[Parallel|parallel Haskell]]. The aim is to demonstrate that parallel Haskell can be employed successfully in industrial projects.<br />
<br />
In the last few years GHC has gained impressive support for parallel programming on commodity multi-core systems. In addition to traditional threads and shared variables, it supports pure parallelism, software transactional memory (STM), and data parallelism. With much of this research and development complete, the next stage is to get the technology into more widespread use.<br />
<br />
This project aims to do the engineering work to solve whatever remaining practical problems are blocking organisations from making serious use of parallelism with GHC. The driving force is the ''applications'' rather than the ''technology''.<br />
<br />
The project involves a partnership with [[#Participating organisations|six groups from commercial and scientific organisations]]. Over the course of two years these groups are applying parallel Haskell in their specific domains. They are being supported by GHC HQ and [http://www.well-typed.com/ Well-Typed] who are providing advice on Haskell tools and techniques, and applying engineering effort to resolve any issues that are hindering these groups' progress.<br />
<br />
The project is being coordinated by [http://www.well-typed.com/ Well-Typed] and they are providing the bulk of the support and engineering effort. The project started in the summer of 2010.<br />
<br />
== Project News ==<br />
<br />
<br />
<br />
=== ThreadScope and friends ===<br />
<br />
We have been continuing our work to make [[ThreadScope]] more helpful and informative in tracking down your parallel and concurrent Haskell performance problems. We now have the ability to collect heap (and some other) statistics from the GHC runtime system and present them in ThreadScope for a selected runtime interval. These features are available for users of GHC 7.6 or newer. On feedback from users, we have improved support for user events of different granularity. We have released a preliminary version of tools for collecting information from hardware performance counters, more specifically the Linux Perf Events. This can be useful for studying IO-heavy programs, the idea being to visualise system calls as being distinct from actual execution of Haskell code. The perf events support will be available for users of a recent development GHC (7.7.x) or the eventual 7.8 release.<br />
<br />
=== Cloud Haskell ===<br />
<br />
The reimplementation of Cloud Haskell is now [http://hackage.haskell.org/package/distributed-process avaiable from Hackage] and in a state where it is ready for serious experiments. Compared to the prototype it is much faster; it can run on [http://hackage.haskell.org/package/network-transport multiple kinds of networks];<br />
it has backends to support different environments (like cluster or cloud, with a proof-of-concept [http://hackage.haskell.org/package/distributed-process-azure backend for Azure]);<br />
has a new system for dealing with node disconnect and reconnect, and a more [https://github.com/haskell-distributed/distributed-process/blob/master/doc/semantics/CloudHaskellSemantics.pdf precisely defined semantics]; supports [http://hackage.haskell.org/package/distributed-static composable], [http://hackage.haskell.org/package/rank1dynamic polymorphic] serialisable closures; and internally the code is better structured and easier to work with.<br />
<br />
The wiki lists some [https://github.com/haskell-distributed/distributed-process/wiki/Important-Open-Issues important open issues] of the implementation; the semantics document mentioned above lists some important open semantic issues.<br />
<br />
== Project artefacts == <br />
<br />
Some of the work by our project partners is available to the public<br />
<br />
{| class="wikitable"<br />
! Project<br />
! Partner<br />
! Description<br />
! Status<br />
|-<br />
| [http://www.mew.org/~kazu/proj/mighttpd/en/ mightttpd2]<br />
| IIJ<br />
| File/CGI server on top of Warp<br />
| version 2.5.7 released 2012-04-05<br />
|-<br />
| [http://hackage.haskell.org/package/webserver webserver]<br />
| IIJ<br />
| HTTP server library<br />
| version 0.4.6 released 2011−10−05<br />
|-<br />
| [http://hackage.haskell.org/package/wai-app-file-cgi wai-app-file-cgi]<br />
| IIJ<br />
| File/CGI WAI application (used by Mighttpd)<br />
| version 0.5.8 released 2012-04-05<br />
|-<br />
| [http://hackage.haskell.org/package/wai-logger wai-logger]<br />
| IIJ<br />
| Logging system for WAI (used by Mighttpd)<br />
| version 0.1.4 released 2012-02-13<br />
|-<br />
| [http://hackage.haskell.org/package/http-date http-date]<br />
| IIJ<br />
| Fast parser and formatter for HTTP Date<br />
| version 0.0.2 released 2012-02-17<br />
|-<br />
| dns<br />
| IIJ<br />
| DNS library<br />
| version 0.2.0 released 2011−08−31<br />
|-<br />
| [http://www.mew.org/~kazu/proj/iproute/en/ iproute]<br />
| IIJ<br />
| IP routing table<br />
| version 1.2.5 released 2012-04-02<br />
|-<br />
| [http://hackage.haskell.org/package/domain-auth domain-auth]<br />
| IIJ<br />
| Library for Sender Policy Framework, SenderID, DomainKeys and DKIM.<br />
| version 0.2.0 released 2011−08-31<br />
|-<br />
| [http://www.mew.org/~kazu/proj/rpf/en/ RPF]<br />
| IIJ<br />
| Receiver Policy Framework (milter)<br />
| version 0.2.0 released 2011−08-31<br />
|}<br />
<br />
In addition to helping the [[#participating organisations|participating organisations]], the project will whenever possible make improvements to libraries and tools that are useful to Haskell users more generally.<br />
<br />
{| class="wikitable"<br />
! Project<br />
! Description<br />
! Status<br />
|-<br />
| multiprocess Threadscope<br />
| profiling of multi-process or distributed Haskell systems such as client/server or MPI programs.<br />
| '''in progress'''<br />
|-<br />
| [https://github.com/bjpop/lfg LFG]<br />
| Haskell implementation of some pseudo random number generators from the SPRNG library<br />
| '''testing'''<br />
|-<br />
| [https://github.com/bjpop/haskell-sprng SPRNG binding]<br />
| Haskell wrapper around SPRNG<br />
| '''in progress'''<br />
|-<br />
| [http://hackage.haskell.org/package/threadscope ThreadScope] improvements<br />
| new spark profiling tools, heap statistics, GUI enhancements, bug fixes<br />
| version 0.2.2 released 2012-11-02<br />
|-<br />
| [http://hackage.haskell.org/package/ghc-events ghc-events] improvements<br />
| spark events support, eventlog verification, improved eventlog merging<br />
| version 0.4.2.0 released 2012-11-01<br />
|-<br />
| [http://hackage.haskell.org/package/linux-perf linux-perf] <br />
| Library for manipulating the data file output of the Linux perf command, with special support for displaying GHC RTS perf events in ghc-events and ThreadScope<br />
| version 0.3 released 2012-11-03<br />
|-<br />
| gtk2hs maintenance & release<br />
| GHC 7.2 support<br />
| version 0.12.2 released 2011-11-13<br />
|-<br />
| [http://hackage.haskell.org/package/haskell-mpi Haskell-MPI]<br />
| Haskell bindings to C MPI library<br />
| version 1.2.1 released 2012-02-15<br />
|-<br />
| rowspan="5" | GHC RTS improvements<br />
| [http://hackage.haskell.org/trac/ghc/ticket/4449 &nbsp;#4449] - GHC 7 can't do IO when daemonized<br />
| fixed in 7.0.x branch<br />
|-<br />
| [http://hackage.haskell.org/trac/ghc/ticket/4504 &nbsp;#4504] - "awaitSignal Nothing" does not block thread with -threaded<br />
| fixed in 7.0.2<br />
|-<br />
| [http://hackage.haskell.org/trac/ghc/ticket/4512 &nbsp;#4512] - EventLog does not play well with forkProcess<br />
| fixed in 7.0.x branch<br />
|-<br />
| [http://hackage.haskell.org/trac/ghc/ticket/4514 &nbsp;#4514] - IO manager can deadlock if a file descriptor is closed behind its back<br />
| fixed in 7.0.x branch<br />
|-<br />
| [http://hackage.haskell.org/trac/ghc/ticket/4854 &nbsp;#4854] - Validating on a PPC Mac OS X: Fix miscellaneous errors and warnings<br />
| fixed in 7.0.x branch<br />
|-<br />
| [http://www.cse.unsw.edu.au/~chak/haskell/c2hs/ c2hs] improvements<br />
| marshalling functions now can have arguments supplied to them.<br />
| version 0.16.3 released 2011−03−24<br />
|-<br />
| [http://hackage.haskell.org/package/libssh2 libssh2]<br />
| Major refactoring of the libssh2 bindings for Haskell to use the Haskell I/O manager to deal with blocking, rather than block in C land (necessary for the Cloud Haskell Azure backend)<br />
| version 0.2 released 2012-10-14<br />
|-<br />
| [http://hackage.haskell.org/package/http-conduit http-conduit]<br />
| Added support for client SSL certificates (necessary for the Cloud Haskell Azure backend)<br />
| version 1.8.1 released 2012-10-24<br />
|-<br />
| [http://hackage.haskell.org/package/network-transport network-transport] / [http://hackage.haskell.org/package/network-transport-tcp network-transport-tcp]<br />
| Generic Network Transport interface and TCP instantiation, used by Cloud Haskell, HdpH, and MetaPar<br />
| version 0.3.0 released 2012-10-03 / version 0.3.1 released 2012-10-19 <br />
|-<br />
| [http://hackage.haskell.org/package/distributed-process distributed-process] / [http://hackage.haskell.org/package/distributed-static distributed-static] / [http://hackage.haskell.org/package/distributed-process-simplelocalnet distributed-process-simplelocalnet]<br />
| Reimplementation of Cloud Haskell <br />
| version 0.4.0.2 released 2012-10-23 / version 0.2.1 released 2012-10-03 / version 0.2.0.7 released 2012-10-23<br />
|-<br />
| [http://hackage.haskell.org/package/distributed-process-azure distributed-process-azure] / [http://hackage.haskell.org/package/azure-service-api azure-service-api]<br />
| Proof-of-concept Cloud Haskell backend for the Microsoft Azure<br />
| version 0.1.0 released 2012-11-05<br />
|}<br />
<br />
The project will also aim to document existing tools and parallel programming practices, making them accesible to a wider public.<br />
<br />
{| class="wikitable"<br />
! Project<br />
! Description<br />
! Status<br />
|-<br />
| [[ThreadScope Tour]]<br />
| a short guide to using ThreadScope to help analyse parallel program performance<br />
| unveiled 2012-01-14<br />
|-<br />
| rowspan="2" | submissions to TMR 19<br />
| Mighttpd – a High Performance Web Server in Haskell (Kazu Yamamoto)<br />
| submitted<br />
|-<br />
| High Performance Haskell with MPI (Bernie Pope and Dmitry Astapov)<br />
| submitted<br />
|-<br />
| [[Parallel|Parallel Haskell Portal]]<br />
| one-stop resource oriented for users of parallelism and concurrency in Haskell<br />
| unveiled 2011−04−20<br />
|-<br />
| [http://www.haskell.org/haskellwiki/Cloud_Haskell Cloud Haskell wiki]<br />
| Collection of Cloud Haskell resources, as well as links to a number of new blog posts about Cloud Haskell<br />
| last update 2012-11-12<br />
|}<br />
<br />
== The Parallel Haskell Digest ==<br />
<br />
We have been publishing a regular newsletter containing project news, other parallel news from around the Haskell community and short "Word of the Month" articles giving brief introductions to important concepts in parallelism.<br />
<br />
The back issues are here:<br />
<br />
* [http://www.well-typed.com/blog/52 Parallel Haskell Digest 1] with word of the month '''spark'''<br />
* [http://www.well-typed.com/blog/53 Parallel Haskell Digest 2] with word of the month '''thread of execution'''<br />
* [http://www.well-typed.com/blog/55 Parallel Haskell Digest 3] with word of the month '''parallel arrays'''<br />
* [http://www.well-typed.com/blog/56 Parallel Haskell Digest 4] with words of the month '''par''' and '''pseq'''<br />
* [http://www.well-typed.com/blog/58 Parallel Haskell Digest 5] with word of the month '''strategy'''<br />
* [http://www.well-typed.com/blog/60 Parallel Haskell Digest 6] with word of the month '''dataflow''' as in dataflow parallelism<br />
* [http://www.well-typed.com/blog/62 Parallel Haskell Digest 7] (catching up on community news)<br />
* [http://www.well-typed.com/blog/64 Parallel Haskell Digest 8] with word of the month '''MVar'''<br />
* [http://www.well-typed.com/blog/65 Parallel Haskell Digest 9] with the word of the month '''transaction'''<br />
* [http://www.well-typed.com/blog/66 Parallel Haskell Digest 10] with the word of the month '''channel'''<br />
* [http://www.well-typed.com/blog/67 Parallel Haskell Digest 11] with the word of the month '''actor''' (see part 2, [http://www.well-typed.com/blog/68 A Cloud Haskell Appetiser])<br />
<br />
== Getting involved ==<br />
<br />
Progress reports will be posted to the [http://groups.google.com/group/parallel-haskell parallel Haskell mailing list] and to the [http://www.well-typed.com/blog/ Well-Typed blog].<br />
<br />
The best starting point to get involved is to join the mailing list. Note that the list is for parallel Haskell generally, not just the Parallel GHC Project.<br />
<br />
== Participating organisations ==<br />
<br />
;[http://www.dragonfly.co.nz/ Dragonfly]<br />
:Cloudy Bayes: Hierarchical Bayesian modeling in Haskell<br />
<br />
:The Cloudy Bayes project aims to develop a fast Bayesian model fitter that takes advantage of modern multiprocessor machines. It will support model descriptions in the BUGS model description language (WinBUGS, OpenBUGS, and JAGS). It will be implemented as an embedded domain specific language (EDSL) within Haskell. A wide range of model hierarchical Bayesian model structures will be possible, including many of the models used in medical, ecological, and biological sciences.<br />
<br />
:Cloudy Bayes will provide an easy to use interface for describing models, running Monte Carlo Markov chain (MCMC) fitters, diagnosing performance and convergence criteria as it runs, and collecting output for post-processing. Haskell's strong type system will be used to ensure that model descriptions make sense, providing a fast, safe development cycle.<br />
<br />
;[http://www.iij-ii.co.jp/en/ IIJ Innovation Institute Inc.]<br />
:Haskell is suitable for many kinds of domain, and GHC's support for lightweight threads makes it attractive for concurrency applications. An exception has been network server programming because GHC 6.12 and earlier have an IO manager that is limited to 1024 network sockets. GHC 7 has a new IO manager implementation that gets rid of this limitation.<br />
<br />
:This project will implement several network servers to demonstrate that Haskell is suitable for network servers that handle a massive number of concurrent connections.<br />
<br />
;[http://www.lanl.gov/ Los Alamos National Laboratory]<br />
:This project will use parallel Haskell to implement high-performance Monte Carlo algorithms, a class of algorithms which use randomness to sample large or otherwise intractable solution spaces. The initial goal is a particle-based MC algorithm suitable for modeling the flow of radiation, with application to problems in astrophysics. From this, the project is expected to move to identification of suitable abstractions for expressing a wider variety of Monte Carlo algorithms, and using models for different physical phenomena.<br />
<br />
;[http://www.willowgarage.com/ Willow Garage Inc.]<br />
:Distributed Rigid Body Dynamics in ROS<br />
<br />
:Willow Garage seeks a high-level representation for a distributed rigid body dynamics simulation, capable of excellent parallel speedup on current and foreseeable hardware, yet linking to existing optimized libraries for low-level message passing and matrix math.<br />
<br />
:This project will drive API, performance, and profiling tool requirements for Haskell's interface to the Message Passing Interface (MPI) specification, an industry-standard in High Performance Computing (HPC), as used on clusters of many nodes.<br />
<br />
:Competing internal initiatives use C++/MPI and CUDA directly.<br />
<br />
:Willow Garage aims to lay the groundwork for personal robotics applications in everyday life. ROS ([http://ros.org Robot Operating System]) is an open source, meta-operating system for your robot.<br />
<br />
; [http://www.tid.es/en/ Telefónica I+D]<br />
<br />
: This project is to demonstrate parallel Haskell technology using the example of graph algorithms in large graphs representing social networks. The current work is on parallel versions of the [http://en.wikipedia.org/wiki/Bron%E2%80%93Kerbosch_algorithm Bron-Kerbosch algorithm] for finding maximal cliques in a graph. The initial goal is to demonstrate good speedups on multi-core and the overall aim to demonstrate good speedups of a distributed version of the algorithm using Cloud Haskell.<br />
<br />
; [http://www.vett.co.uk/ VETT UK]<br />
<br />
: VETT are working on a transaction processing application using Cloud Haskell. More details will be available shortly.</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=44990ThreadScope2012-03-24T18:16:02Z<p>Mikolaj: /* Getting Started */ Inform that libxml is not needed on JaffaCake's feedback</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Getting Started ==<br />
<br />
Have gtk on your machine? (Note that you don't need all of gtk and gtk2hs, e.g., libxml is unneeded.) See the gtk2hs install instructions <span style="font-size:8pt">([[Gtk2Hs/Windows|Windows]] ∙ [[Gtk2Hs/Mac|Mac]] ∙ [[Gtk2Hs/Linux|Linux]])</span> and then<br />
<br />
cabal update<br />
gtk-demo<br />
cabal install gtk<br />
cabal install threadscope<br />
<br />
Next, check out the [[ThreadScope Tour]].<br />
<br />
== Features ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can place bookmarks at various points in the time profile to help with navigation. Bookmarks can be emitted from Haskell code using the `traceEvent` action.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
For more detailed instructions, have a look at the [[ThreadScope Tour]].<br />
<br />
== Installing ThreadScope ==<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope itself is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
You can now try to run ThreadScope to make sure it built correctly by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
Please send comments, corrections etc. to [mailto:satnams@microsoft.com satnams@microsoft.com]<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
There is a [http://trac.haskell.org/ThreadScope/ bug tracker and developer wiki].<br />
<br />
The source for ghc-events and threadscope is available:<br />
<br />
darcs get http://code.haskell.org/ghc-events/<br />
darcs get http://code.haskell.org/ThreadScope/<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011<br />
<br />
[[Category:ThreadScope]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=44391Applications and libraries/Games2012-02-09T22:47:20Z<p>Mikolaj: /* Unfinished/in-progress games */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[https://github.com/Mikolaj/Allure Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/simon/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/simon/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/simon/fungen/browse/examples/worms/worms.hs games], in Haskell. Forks and patches welcome!<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://hackage.haskell.org/package/lambdacube-engine LambdaCube]<br />
:LambdaCube is a 3D rendering engine entirely written in Haskell. The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A game engine library for roguelike games of arbitrary theme, size and complexity, packaged together with a small example dungeon crawler. When completed, it will let you specify content to be procedurally generated, define the AI behaviour on top of the generic content-independent rules and compile a ready-to-play game binary, using either the supplied or a custom-made main loop. Several frontends are available (GTK is the default) and many other generic engine components are easily overridden, but the fundamental source of flexibility lies in the strict and type-safe separation of code and content.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=44390Applications and libraries/Games2012-02-09T22:46:23Z<p>Mikolaj: /* Unfinished/in-progress game engines/libraries */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[https://github.com/Mikolaj/Allure Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/simon/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/simon/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/simon/fungen/browse/examples/worms/worms.hs games], in Haskell. Forks and patches welcome!<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://hackage.haskell.org/package/lambdacube-engine LambdaCube]<br />
:LambdaCube is a 3D rendering engine entirely written in Haskell. The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A game engine library for roguelike games of arbitrary theme, size and complexity, packaged together with a small example dungeon crawler. When completed, it will let you specify content to be procedurally generated, define the AI behaviour on top of the generic content-independent rules and compile a ready-to-play game binary, using either the supplied or a custom-made main loop. Several frontends are available (GTK is the default) and many other generic engine components are easily overridden, but the fundamental source of flexibility lies in the strict and type-safe separation of code and content.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=44389Applications and libraries/Games2012-02-09T22:44:38Z<p>Mikolaj: /* Game Engines and Libraries */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[https://github.com/Mikolaj/Allure Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/simon/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/simon/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/simon/fungen/browse/examples/worms/worms.hs games], in Haskell. Forks and patches welcome!<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://hackage.haskell.org/package/lambdacube-engine LambdaCube]<br />
:LambdaCube is a 3D rendering engine entirely written in Haskell. The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A game engine library for roguelike games<br />
of arbitrary theme, size and complexity,<br />
packaged together with a small example dungeon crawler.<br />
When completed, it will let you specify content<br />
to be procedurally generated, define the AI behaviour<br />
on top of the generic content-independent rules<br />
and compile a ready-to-play game binary, using either<br />
the supplied or a custom-made main loop.<br />
Several frontends are available (GTK is the default)<br />
and many other generic engine components are easily overridden,<br />
but the fundamental source of flexibility lies<br />
in the strict and type-safe separation of code and content.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=44388Applications and libraries/Games2012-02-09T22:10:34Z<p>Mikolaj: /* Games */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[https://github.com/Mikolaj/Allure Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/simon/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/simon/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/simon/fungen/browse/examples/worms/worms.hs games], in Haskell. Forks and patches welcome!<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://hackage.haskell.org/package/lambdacube-engine LambdaCube]<br />
:LambdaCube is a 3D rendering engine entirely written in Haskell. The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=44387Applications and libraries/Games2012-02-09T22:09:53Z<p>Mikolaj: /* Unfinished/in-progress games */</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
See also: [[Game Development]]<br />
<br />
<br />
== Games ==<br />
<br />
See also the [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:game Game] category on Hackage.<br />
<br />
; [http://folk.uio.no/carljsv/gorillabas/GorillaBAS-0.1.tar.gz GorillaBAS]<br />
: A concrete game from an attempt on defining computer games.<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/boomslang boomslang]<br />
: A clone of the popular Flash game Boomshine.<br />
<br />
;[https://github.com/yairchu/defend/tree Defend The King from Forces of Different]: A simple multiplayer real time strategy game.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://www.hedgewars.org/ Hedgewars]<br />
:A turn-based artillery game. The game server is written in Haskell.<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/hinvaders hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98.<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A small roguelike game with a flexible engine. GTK and terminal front-ends.<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://mokehehe.blogspot.com/2009/04/super-nario-move-to-github.html Monao]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [https://github.com/mokehehe/monao Monao on github]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://hackage.haskell.org/package/SpaceInvaders Space Invaders]<br />
:A video game, based on [[Yampa]]<br />
<br />
;[http://hackage.haskell.org/package/stunts stunts]<br />
:A revival of the classic racing game Stunts to serve as a non-toy-sized example for LambdaCube.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
=== Unfinished/in-progress games ===<br />
<br />
;[https://github.com/Mikolaj/Allure Allure of the Stars]<br />
:A near-future Sci-Fi roguelike and tactical squad game. Long-term goals are high replayability and auto-balancing through procedural content generation and persistent content modification based on player behaviour. The game is written using the [http://hackage.haskell.org/package/LambdaHack LambdaHack] roguelike game engine.<br />
<br />
;[http://ipwnstudios.com/node/4 Bloodknight]<br />
:An action RPG for mobile devices<br />
<br />
; [https://github.com/ghulette/haskell-game-of-life haskell-game-of-life]<br />
: Conway's Game of Life<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife. It uses GLUT.<br />
<br />
;[http://joyridelabs.de/game/ Nikki and the Robots]<br />
:A puzzle, platformer game<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://hackage.haskell.org/package/FunGEn FunGEn]<br />
:FunGEn (Functional Game Engine) is a platform-independent BSD-licensed 2D game engine based on OpenGL and GLUT. Its light dependencies make it easy to install, however GLUT is reputed to be unsuitable for simultaneous keypresses. As of 2011 it's the only general-purpose game engine, and the quickest way to throw together [http://darcsden.com/simon/fungen/browse/examples/helloworld.hs simple] [http://darcsden.com/simon/fungen/browse/examples/pong/pong.hs 2D] [http://darcsden.com/simon/fungen/browse/examples/worms/worms.hs games], in Haskell. Forks and patches welcome!<br />
<br />
;[http://hackage.haskell.org/package/GLFW-b GLFW-b]<br />
:Bindings to GLFW, a free, open source, multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://hackage.haskell.org/package/bullet Bullet]<br />
:A wrapper for the Bullet physics engine.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/hogre hogre]<br />
:Haskell bindings to the excellent OGRE 3D rendering engine. Ogre has been used in commercial games such as Torchlight and several books exist documenting the Ogre API. Ogre uses an MIT license making it compatible with many Haskell libraries.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
;[http://hackage.haskell.org/package/lambdacube-engine LambdaCube]<br />
:LambdaCube is a 3D rendering engine entirely written in Haskell. The main goal of this project is to provide a modern and feature rich graphical backend for various Haskell projects, and in the long run it is intended to be a practical solution even for serious purposes.<br />
<br />
<br />
=== Unfinished/in-progress game engines/libraries ===<br />
<br />
;[[HaskGame]]<br />
:An incomplete graphics system abstraction layer.<br />
<br />
; [https://github.com/shicks/hsgame hsgame]<br />
:A framework for network games<br />
<br />
;[https://github.com/adorablepuppy/CurryDog CurryDog]<br />
:Aims to be a 2d and 3d modular game engine.<br />
<br />
<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=Tutorials&diff=43683Tutorials2011-12-21T05:18:38Z<p>Mikolaj: /* Best places to start */ Replace the dead link to YAHT</p>
<hr />
<div>==Introductions to Haskell==<br />
<br />
These are the recommended places to start learning, short of buying a textbook.<br />
<br />
=== Best places to start ===<br />
<br />
;[http://learnyouahaskell.com Learn You a Haskell for Great Good! (LYAH)]<br />
: Nicely illustrated tutorial showing Haskell concepts while interacting in GHCi. Written and drawn by Miran Lipovača.<br />
<br />
;[http://book.realworldhaskell.org/ Real World Haskell (RWH)]<br />
: A free online version of the complete book, with numerous reader-submitted comments. RWH is best suited for people who know the fundamentals of haskell already, and can write basic Haskell programs themselves already. It makes a great follow up after finishing LYAH. It can easily be read cover-to-cover, or you can focus on the chapters that interest you most, or when you find an idea you don't yet understand.<br />
<br />
;[http://en.wikibooks.org/wiki/Haskell/YAHT Yet Another Haskell Tutorial (YAHT)]<br />
:By Hal Daume III et al. A recommended tutorial for Haskell that is still under construction but covers already much ground. Also a classic text.<br />
<br />
;[http://en.wikibooks.org/wiki/Haskell Haskell Wikibook] <br />
:A communal effort by several authors to produce the definitive Haskell textbook. Its very much a work in progress at the moment, and contributions are welcome.<br />
<br />
;[http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Write Yourself a Scheme in 48 Hours in Haskell]<br />
:A Haskell Tutorial, by Jonathan Tang. Most Haskell tutorials on the web seem to take a language-reference-manual approach to teaching. They show you the syntax of the language, a few language constructs, and then have you construct a few simple functions at the interactive prompt. The "hard stuff" of how to write a functioning, useful program is left to the end, or sometimes omitted entirely. This tutorial takes a different tack. You'll start off with command-line arguments and parsing, and progress to writing a fully-functional Scheme interpreter that implements a good-sized subset of R5RS Scheme. Along the way, you'll learn Haskell's I/O, mutable state, dynamic typing, error handling, and parsing features. By the time you finish, you should be fairly fluent in both Haskell and Scheme.<br />
<br />
;[http://acm.wustl.edu/functional/haskell.php How to Learn Haskell]<br />
:Some students at Washington University in St. Louis documented the path they took to learning Haskell and put together a nice meta-tutorial to guide beginners through some of the available resources. Experienced programmers looking for some quick code examples may be interested in their [http://acm.wustl.edu/functional/hs-breads.php breadcrumbs].<br />
<br />
=== More important tutorials ===<br />
<br />
;[http://www.haskell.org/tutorial/ A [[Gentle]] Introduction to Haskell] :By Paul Hudak, John Peterson, and Joseph H. Fasel. The title is misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages). A classic, but not for the faint of heart (it's not so gentle). Also available in [http://www.haskell.org/wikiupload//5/5e/GentleFR.pdf French] [http://gorgonite.developpez.com/livres/traductions/haskell/gentle-haskell/ from this website] and also [http://www.rsdn.ru/article/haskell/haskell_part1.xml in Russian]. <br />
<br />
;[[H-99: Ninety-Nine Haskell Problems]]<br />
:A collection of programming puzzles, with Haskell solutions. Solving these is a great way to get into Haskell programming.<br />
<br />
;[[Haskell Tutorial for C Programmers]]<br />
:By Eric Etheridge. From the intro: "This tutorial assumes that the reader is familiar with C/C++, Python, Java, or Pascal. I am writing for you because it seems that no other tutorial was written to help students overcome the difficulty of moving from C/C++, Java, and the like to Haskell."<br />
<br />
;[http://www-106.ibm.com/developerworks/edu/os-dw-linuxhask-i.html Beginning Haskell] <br />
:From IBM developerWorks. This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/teaching/Hskurs_toc.html Online Haskell Course] <br />
:By Ralf Hinze (in German).<br />
<br />
;[http://www.cse.chalmers.se/~rjmh/tutorials.html Tutorial Papers in Functional Programming].<br />
:A collection of links to other Haskell tutorials, from John Hughes.<br />
<br />
;[http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml Two Dozen Short Lessons in Haskell] <br />
:By Rex Page. A draft of a textbook on functional programming, available by ftp. It calls for active participation from readers by omitting material at certain points and asking the reader to attempt to fill in the missing information based on knowledge they have already acquired. The missing information is then supplied on the reverse side of the page. <br />
<br />
;[ftp://ftp.geoinfo.tuwien.ac.at/navratil/HaskellTutorial.pdf Haskell-Tutorial] <br />
:By Damir Medak and Gerhard Navratil. The fundamentals of functional languages for beginners. <br />
<br />
;[http://video.s-inf.de/#FP.2005-SS-Giesl.(COt).HD_Videoaufzeichnung Video Lectures] <br />
:Lectures (in English) by Jürgen Giesl. About 30 hours in total, and great for learning Haskell. The lectures are 2005-SS-FP.V01 through 2005-SS-FP.V26. Videos 2005-SS-FP.U01 through 2005-SS-FP.U11 are exercise answer sessions, so you probably don't want those.<br />
<br />
;[http://www.cs.utoronto.ca/~trebla/fp/ Albert's Functional Programming Course] <br />
:A 15 lesson introduction to most aspects of Haskell.<br />
<br />
;[http://www.iceteks.com/articles.php/haskell/1 Introduction to Haskell]<br />
:By Chris Dutton, An "attempt to bring the ideas of functional programming to the masses here, and an experiment in finding ways to make it easy and interesting to follow".<br />
<br />
;[http://www.csc.depauw.edu/~bhoward/courses/0203Spring/csc122/haskintro/ An Introduction to Haskell]<br />
:A brief introduction, by Brian Howard.<br />
<br />
;[http://web.syntaxpolice.org/lectures/haskellTalk/slides/index.html Introduction to Haskell]<br />
:By Isaac Jones (2003).<br />
<br />
;[http://www.linuxjournal.com/article/9096 Translating Haskell into English]<br />
:By Shannon Behrens, a glimpse of the Zen of Haskell, without requiring that they already be Haskell converts.<br />
<br />
;[http://www.shlomifish.org/lecture/Perl/Haskell/slides/ Haskell for Perl Programmers]<br />
:Brief introduction to Haskell, with a view to what perl programmers are interested in<br />
<br />
;[http://lisperati.com/haskell/ How To Organize a Picnic on a Computer]<br />
:Fun introduction to Haskell, step by step building of a program to seat people at a planned picnic, based on their similarities using data from a survey and a map of the picnic location.<br />
<br />
;[http://cs.wwc.edu/KU/PR/Haskell.html Haskell Tutorial]<br />
<br />
;[http://www.lisperati.com/haskell/ Conrad Barski's Haskell tutorial .. with robots]<br />
<br />
;[[Media:Introduction.pdf|Frederick Ross's Haskell introduction]]<br />
<br />
;[http://de.wikibooks.org/wiki/Haskell Dirk's Haskell Tutorial]<br />
:in German for beginners by a beginner. Not so deep, but with a lot examples with very small steps.<br />
<br />
;[http://www.crsr.net/Programming_Languages/SoftwareTools/index.html Software Tools in Haskell]<br />
:A tutorial for advanced readers<br />
<br />
== Motivation for using Haskell ==<br />
<br />
;[http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html Why Functional Programming Matters] <br />
:By [http://www.cse.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR> Exposes the advantages of functional programming languages. Demonstrates how higher-order functions and lazy evaluation enable new forms of modularization of programs.<br />
<br />
;[[Why Haskell matters]] <br />
:Discussion of the advantages of using Haskell in particular. An excellent article.<br />
<br />
;[http://www.cs.ukc.ac.uk/pubs/1997/224/index.html Higher-order + Polymorphic = Reusable] <br />
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. Unpublished, May 1997.<BR> <STRONG>Abstract:</STRONG> This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.<br />
<br />
;[http://www-128.ibm.com/developerworks/java/library/j-cb07186.html Explore functional programming with Haskell]<br />
:Introduction to the benefits of functional programming in Haskell by Bruce Tate.<br />
<br />
== Blog articles ==<br />
<br />
There are a large number of tutorials covering diverse Haskell topics<br />
published as blogs. Some of the best of these articles are collected<br />
here:<br />
<br />
;[[Blog articles]]<br />
<br />
==Practical Haskell==<br />
<br />
These tutorials examine using Haskell to writing complex real-world applications<br />
<br />
;[http://research.microsoft.com/%7Esimonpj/Papers/marktoberdorf Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell]<br />
:Simon Peyton Jones. Presented at the 2000 Marktoberdorf Summer School. In "Engineering theories of software construction", ed Tony Hoare, Manfred Broy, Ralf Steinbruggen, IOS Press, ISBN 1-58603-1724, 2001, pp47-96. The standard reference for monadic IO in GHC/Haskell. <br><strong>Abstract:</strong>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.<br />
<br />
;[[Hitchhikers Guide to the Haskell]]<br />
: Tutorial for C/Java/OCaml/... programers by Dmitry Astapov. From the intro: "This text intends to introduce the reader to the practical aspects of Haskell from the very beginning (plans for the first chapters include: I/O, darcs, Parsec, QuickCheck, profiling and debugging, to mention a few)".<br />
<br />
;[http://haskell.org/haskellwiki/IO_inside Haskell I/O inside: Down the Rabbit's Hole]<br />
:By Bulat Ziganshin (2006), a comprehensive tutorial on using IO monad.<br />
<br />
;[http://web.archive.org/web/20060622030538/http://www.reid-consulting-uk.ltd.uk/docs/ffi.html A Guide to Haskell's Foreign Function Interface]<br />
:A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors.<br />
<br />
;[[Haskell IO for Imperative Programmers]]<br />
:A short introduction to IO from the perspective of an imperative programmer.<br />
<br />
;[[A brief introduction to Haskell|A Brief Introduction to Haskell]]<br />
:A translation of the article, [http://www.cs.jhu.edu/~scott/pl/lectures/caml-intro.html Introduction to OCaml], to Haskell.<br />
<br />
;[[Roll your own IRC bot]]<br />
:This tutorial is designed as a practical guide to writing real world code in Haskell and hopes to intuitively motivate and introduce some of the advanced features of Haskell to the novice programmer, including monad transformers. Our goal is to write a concise, robust and elegant IRC bot in Haskell.<br />
<br />
;[http://haskell.org/gtk2hs/docs/tutorial/glade/ Glade Tutorial (GUI Programming)]<br />
:For the absolute beginner in both Glade and Gtk2Hs. Covers the basics of Glade and how to access a .glade file and widgets in Gtk2Hs. Estimated learning time: 2 hours.<br />
;[http://www.muitovar.com/glade/es-index.html Tutorial de Glade]<br />
:A Spanish translation of the Glade tutorial<br />
<br />
;[http://www.muitovar.com/gtk2hs/index.html Gtk2Hs Tutorial]<br />
: An extensive Gtk2Hs programming guide, based on the GTK+2.0 tutorial by Tony Gale and Ian Main. This tutorial on GUI programming with Gtk2Hs has 22 chapters in 7 sections, plus an appendix on starting drawing with Cairo. A Spanish translation and source code of the examples are also available.<br />
<br />
;Applications of Functional Programming<br />
:Colin Runciman and David Wakeling (ed.), UCL Press, 1995, ISBN 1-85728-377-5 HB. From the cover:<blockquote>This book is unique in showcasing real, non-trivial applications of functional programming using the Haskell language. It presents state-of-the-art work from the FLARE project and will be an invaluable resource for advanced study, research and implementation.</blockquote><br />
<br />
;[[DealingWithBinaryData]] a guide to bytestrings, the various <tt>Get</tt> monads and the <tt>Put</tt> monad.<br />
<br />
;[[Internationalization of Haskell programs]]<br />
:Short tutorial on how to use GNU gettext utility to make applications, written on Haskell, multilingual.<br />
<br />
===Testing===<br />
<br />
;[http://blog.moertel.com/articles/2006/10/31/introductory-haskell-solving-the-sorting-it-out-kata Small overview of QuickCheck]<br />
<br />
;[[Introduction to QuickCheck]]<br />
<br />
==Reference material==<br />
<br />
;[http://haskell.org/haskellwiki/Category:Tutorials A growing list of Haskell tutorials on a diverse range of topics]<br />
:Available on this wiki<br />
<br />
;[http://haskell.org/haskellwiki/Category:How_to "How to"-style tutorials and information]<br />
<br />
;[http://zvon.org/other/haskell/Outputglobal/index.html Haskell Reference] <br />
:By Miloslav Nic.<br />
<br />
;[http://members.chello.nl/hjgtuyl/tourdemonad.html A tour of the Haskell Monad functions]<br />
:By Henk-Jan van Tuyl.<br />
<br />
;[http://www.cse.unsw.edu.au/~en1000/haskell/inbuilt.html Useful Haskell functions]<br />
:An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.<br />
<br />
;[http://www.cs.chalmers.se/Cs/Grundutb/Kurser/d1pt/d1pta/ListDoc/ Haskell's Standard List Functions]<br />
:A tour of the standard Haskell functions, directed by what you want to achieve<br />
<br />
;[http://haskell.org/ghc/docs/latest/html/libraries/ Documentation for the standard libraries]<br />
:Complete documentation of the standard Haskell libraries.<br />
<br />
;[http://www.haskell.org/haskellwiki/Category:Idioms Haskell idioms]<br />
:A collection of articles describing some common Haskell idioms. Often quite advanced.<br />
<br />
;[http://www.haskell.org/haskellwiki/Blow_your_mind Useful idioms]<br />
:A collection of short, useful Haskell idioms.<br />
<br />
;[http://www.haskell.org/haskellwiki/Programming_guidelines Programming guidelines]<br />
:Some Haskell programming and style conventions.<br />
<br />
;[http://www.md.chalmers.se/~rjmh/Combinators/LightningTour/index.htm Lightning Tour of Haskell]<br />
:By John Hughes, as part of a Chalmers programming course<br />
<br />
;[http://www.cs.chalmers.se/~augustss/AFP/manuals/haskeller.dvi.gz The Little Haskeller] <br />
:By Cordelia Hall and John Hughes. 9. November 1993, 26 pages. An introduction using the Chalmers Haskell B interpreter (hbi). Beware that it relies very much on the user interface of hbi which is quite different for other Haskell systems, and the tutorials cover Haskell 1.2 , not Haskell 98.<br />
<br />
;[http://www.cs.uu.nl/people/jeroen/courses/fp-eng.pdf Functional Programming]<br />
:By Jeroen Fokker, 1995. (153 pages, 600 KB). Textbook for learning functional programming with Gofer (an older implementation of Haskell). Here without Chapters&nbsp;6 and&nbsp;7.<br />
<br />
== Comparisons to other languages ==<br />
<br />
Articles constrasting feature of Haskell with other languages.<br />
<br />
;[http://programming.reddit.com/goto?id=nq1k Haskell versus Scheme]<br />
:Mark C. Chu-Carroll, Haskell and Scheme: Which One and Why?<br />
<br />
;[http://wiki.python.org/moin/PythonVsHaskell Comparing Haskell and Python]<br />
:A short overview of similarities and differences between Haskell and Python.<br />
<br />
;[http://programming.reddit.com/goto?id=nwm2 Monads in OCaml]<br />
:Syntax extension for monads in OCaml<br />
<br />
;[http://www.shlomifish.org/lecture/Perl/Haskell/slides/ Haskell for Perl programmers]<br />
:Short intro for perlers<br />
<br />
;[[A_brief_introduction_to_Haskell|Introduction to Haskell]] versus [http://www.cs.jhu.edu/~scott/pl/lectures/caml-intro.html Introduction to OCaml].<br />
<br />
;[http://www.thaiopensource.com/relaxng/derivative.html An algorithm for RELAX NG validation]<br />
:by James Clark (of RELAX NG fame). Describes an algorithm for validating an XML document against a RELAX NG schema, uses Haskell to describe the algorithm. The algorithm in Haskell and Java is then [http://www.donhopkins.com/drupal/node/117 discussed here].<br />
<br />
;[http://mult.ifario.us/articles/2006/10/11/first-steps-with-haskell-for-web-applications Haskell + FastCGI versus Ruby on Rails]<br />
:A short blog entry documenting performance results with ruby on rails and Haskell with fastcgi<br />
<br />
;[http://haskell.org/papers/NSWC/jfp.ps Haskell vs. Ada vs. C++ vs. Awk vs. ..., An Experiment in Software Prototyping Productivity] (postscript)<br />
:Paul Hudak and Mark P. Jones, 16 pages.<blockquote>Description of the results of an experiment in which several conventional programming languages, together with the functional language Haskell, were used to prototype a Naval Surface Warfare Center requirement for Geometric Region Servers. The resulting programs and development metrics were reviewed by a committee chosen by the US Navy. The results indicate that the Haskell prototype took significantly less time to develop and was considerably more concise and easier to understand than the corresponding prototypes written in several different imperative languages, including Ada and C++. </blockquote> <br />
<br />
;[http://www.osl.iu.edu/publications/prints/2003/comparing_generic_programming03.pdf A Comparative Study of Language Support for Generic Programming] (pdf)<br />
:Ronald Garcia, Jaakko Jrvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. In Proceedings of the 2003 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA'03), October 2003.<blockquote>An interesting comparison of generic programming support across languages, including: Haskell, SML, C++, Java, C#. Haskell supports all constructs described in the paper -- the only language to do so. </blockquote><br />
<br />
;[http://homepages.inf.ed.ac.uk/wadler/realworld/index.html Functional Programming in the Real World]<br />
:A list of functional programs applied to real-world tasks. The main criterion for being real-world is that the program was written primarily to perform some task, not primarily to experiment with functional programming. Functional is used in the broad sense that includes both `pure' programs (no side effects) and `impure' (some use of side effects). Languages covered include CAML, Clean, Erlang, Haskell, Miranda, Scheme, SML, and others.<br />
<br />
;[http://www.defmacro.org/ramblings/lisp-in-haskell.html Lisp in Haskell]<br />
:Writing A Lisp Interpreter In Haskell, a tutorial<br />
<br />
== Teaching Haskell ==<br />
<br />
;[http://www.cs.ukc.ac.uk/pubs/1997/208/index.html Where do I begin? A problem solving approach to teaching functional programming]<br />
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997. <br> <STRONG>Abstract:</STRONG> This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study. <br />
<br />
;[http://www.cs.ukc.ac.uk/pubs/1995/214/index.html Functional programming through the curriculum]<br />
:By [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson] and Steve Hill. In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995. <br> <STRONG>Abstract:</STRONG> This paper discusses our experience in using a functional language in topics across the computer science curriculum. After examining the arguments for taking a functional approach, we look in detail at four case studies from different areas: programming language semantics, machine architectures, graphics and formal languages. <br />
<br />
;[http://www.cse.unsw.edu.au/~chak/papers/CK02a.html The Risks and Benefits of Teaching Purely Functional Programming in First Year]<br />
:By [http://www.cse.unsw.edu.au/~chak Manuel M. T. Chakravarty] and [http://www.cse.unsw.edu.au/~keller Gabriele Keller]. Journal of Functional Programming 14(1), pp 113-123, 2004. An earlier version of this paper was presented at Functional and Declarative Programming in Education (FDPE02). <br> <strong>Abstract</strong> We argue that teaching purely functional programming as such in freshman courses is detrimental to both the curriculum as well as to promoting the paradigm. Instead, we need to focus on the more general aims of teaching elementary techniques of programming and essential concepts of computing. We support this viewpoint with experience gained during several semesters of teaching large first-year classes (up to 600 students) in Haskell. These classes consisted of computer science students as well as students from other disciplines. We have systematically gathered student feedback by conducting surveys after each semester. This article contributes an approach to the use of modern functional languages in first year courses and, based on this, advocates the use of functional languages in this setting.<br />
<br />
<br />
==Using monads==<br />
<br />
See also the [[Monad]] HaskellWiki page.<br />
<br />
<br />
===Recommended tutorials===<br />
<br />
;[http://mvanier.livejournal.com/3917.html Mike Vanier's monad tutorial]<br />
:Recommended by David Balaban.<br />
<br />
;[[All About Monads]]<br />
:By Jeff Newbern. This tutorial aims to explain the concept of a monad and its application to functional programming in a way that is easy to understand and useful to beginning and intermediate Haskell programmers. Familiarity with the Haskell language is assumed, but no prior experience with monads is required. <br />
<br />
;[[Monads as computation]]<br />
:A tutorial which gives a broad overview to motivate the use of monads as an abstraction in functional programming and describe their basic features. It makes an attempt at showing why they arise naturally from some basic premises about the design of a library.<br />
<br />
;[[Monads as containers]]<br />
:A tutorial describing monads from a rather different perspective: as an abstraction of container-types, rather than an abstraction of types of computation.<br />
<br />
;[http://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html Monad Transformers Step by Step]<br />
:By Martin Grabm&uuml;ller. A small tutorial on using monad transformers. In contrast to others found on the web, it concentrates on using them, not on their implementation.<br />
<br />
;[[What a Monad is not]]<br />
<br />
;[http://noordering.wordpress.com/2009/03/31/how-you-shouldnt-use-monad/ How you should(n’t) use Monads]<br />
<br />
;[http://www.sampou.org/haskell/a-a-monads/html/index.html モナドのすべて [All About Monads]]<br />
:A translation of Jeff Newbern's tutorial "All About Monads" into Japanese.<br />
<br />
===Parser===<br />
<br />
;[http://www.haskell.org/sitewiki/images/c/c6/ICMI45-paper-en.pdf The Parser monad and other monad (i.e. a monad with state and I/O string)]. <br />
:The parser monad is used to build modular, flexible, parsers. <br />
<br />
;[http://www.haskell.org/wikiupload/c/c6/ICMI45-paper-en.pdf How to build a monadic interpreter in one day] (pdf)<br />
:By Dan Popa. A small tutorial on how to build a language in one day, using the Parser Monad in the front end and a monad with state and I/O string in the back end. Read it if you are interested in learning: <br />
:# language construction and <br />
:# interpreter construction<br />
<br />
===More tutorials===<br />
<br />
;[http://stefan-klinger.de/files/monadGuide.pdf The Haskell Programmer's Guide to the IO Monad - Don't Panic.] <br />
:By Stefan Klinger. This report scratches the surface of category theory, an abstract branch of algebra, just deep enough to find the monad structure. It seems well written.<br />
<br />
;[http://www-users.mat.uni.torun.pl/~fly/materialy/fp/haskell-doc/Monads.html What the hell are Monads?] <br />
:By Noel Winstanley. A basic introduction to monads, monadic programming and IO. This introduction is presented by means of examples rather than theory, and assumes a little knowledge of Haskell. <br />
<br />
;[http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm Monads for the Working Haskell Programmer -- a short tutorial]<br />
:By Theodore Norvell. <br />
<br />
;[http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html You Could Have Invented Monads! (And Maybe You Already Have.)]<br />
:A short tutorial on monads, introduced from a pragmatic approach, with less category theory references <br />
<br />
;[http://www.cs.chalmers.se/~augustss/AFP/monads.html Systematic Design of Monads]<br />
:By John Hughes and Magnus Carlsson. Many useful monads can be designed in a systematic way, by successively adding facilities to a trivial monad. The capabilities that can be added in this way include state, exceptions, backtracking, and output. Here we give a brief description of the trivial monad, each kind of extension, and sketches of some interesting operations that each monad supports.<br />
<br />
;[[Meet Bob The Monadic Lover]]<br />
:By Andrea Rossato. A by-the-author-supposed-to-be funny and short introduction to Monads, with code but without any reference to category theory: what monads look like and what they are useful for, from the perspective of a ... lover. (There is also the slightly more serious [[The Monadic Way]] by the same author.)<br />
<br />
;[http://www.haskell.org/pipermail/haskell-cafe/2006-November/019190.html Monstrous Monads]<br />
:Andrew Pimlott's humourous introduction to monads, using the metaphor of "monsters".<br />
<br />
;[http://strabismicgobbledygook.wordpress.com/2010/03/06/a-state-monad-tutorial/ A State Monad Tutorial]<br />
:A detailed tutorial with simple but practical examples.<br />
<br />
;Computational monads on Reddit, by [http://programming.reddit.com/info/ox6s/comments/coxiv tmoertel] and [http://programming.reddit.com/info/ox6s/comments/coxoh dons].<br />
<br />
;[http://www.loria.fr/~kow/monads/index.html Of monads and space suits]<br />
:By Eric Kow.<br />
<br />
;[[The Monadic Way]]<br />
<br />
;[http://www.alpheccar.org/fr/posts/show/60 Three kind of monads] : sequencing, side effects or containers<br />
<br />
;[[Simple monad examples]]<br />
<br />
;[http://en.wikipedia.org/wiki/Monads_in_functional_programming Article on monads on Wikipedia]<br />
<br />
;[[IO inside]] page<br />
:Explains why I/O in Haskell is implemented with a monad.<br />
<br />
;[http://haskell.org/haskellwiki/Blog_articles#Monads Blog articles]<br />
<br />
;[[Monad Transformers Explained]]<br />
<br />
;[http://www.muitovar.com/monad/moncow.html The Greenhorn's Guide to becoming a Monad Cowboy]<br />
:Covers basics, with simple examples, in a ''for dummies'' style. Includes monad transformers and monadic functions. Estimated learning time 2-3 days.<br />
<br />
;[http://ertes.de/articles/monads.html Understanding Haskell Monads]<br />
<br />
;[http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb A very clear explanation by 808140]<br />
<br />
;[[MonadCont under the hood]]<br />
:A detailed description of the ''Cont'' data type and its monadic operations, including the class ''MonadCont''.<br />
<br />
See also [[Research papers/Monads and arrows]]<br />
<br />
==Workshops on advanced functional programming==<br />
<br />
;[http://compilers.iecc.com/comparch/article/95-04-024 Advanced Functional Programming: 1st International Spring School on Advanced Functional Programming Techniques], Bastad, Sweden, May 24 - 30, 1995. Tutorial Text (Lecture Notes in Computer Science) <br />
<br />
;[http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html Advanced Functional Programming: 2nd International School], Olympia, Wa, Usa, August 26-30, 1996 Tutorial Text (Lecture Notes in Computer Science) <br />
<br />
;[http://alfa.di.uminho.pt/~afp98/ Advanced Functional Programming: 3rd International School], AFP'98, Braga, Portugal, September 12-19, 1998, Revised Lectures (Lecture Notes in Computer Science) <br />
<br />
;[http://www.cs.uu.nl/~johanj/afp/afp4/ Advanced Functional Programming: 4th International School], AFP 2002, Oxford, UK, August 19-24, 2002, Revised Lectures (Lecture Notes in Computer Science) <br />
<br />
;[http://www.cs.ut.ee/afp04/ Advanced Functional Programming: 5th International School], AFP 2004, Tartu, Estonia, August 14-21, 2004, Revised Lectures (Lecture Notes in Computer Science) <br />
<br />
More advanced materials available from the [[Conferences|conference proceedings]], and the [[Research papers]] collection.<br />
<br />
<br />
[[Category:Tutorials]]</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=43337ThreadScope2011-12-03T11:47:27Z<p>Mikolaj: /* People */ add kowey</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Overview ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can place bookmarks at various points in the time profile to help with navigation. Bookmarks can be emitted from Haskell code using the `traceEvent` action.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
== Installing ThreadScope ==<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope itself is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
You can now try to run ThreadScope to make sure it built correctly by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
Please send comments, corrections etc. to [mailto:satnams@microsoft.com satnams@microsoft.com]<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
There is a [http://trac.haskell.org/ThreadScope/ bug tracker and developer wiki].<br />
<br />
The source for ghc-events and threadscope is available:<br />
<br />
darcs get http://code.haskell.org/ghc-events/<br />
darcs get http://code.haskell.org/ThreadScope/<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
* Eric Kow, eric@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011</div>Mikolajhttps://wiki.haskell.org/index.php?title=ThreadScope&diff=42863ThreadScope2011-11-12T10:44:57Z<p>Mikolaj: /* People */</p>
<hr />
<div>'''ThreadScope''' is a tool for performance profiling of parallel Haskell programs.<br />
<br />
The ThreadScope program allows us to debug the parallel performance of Haskell programs. Using ThreadScope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.<br />
<br />
== Overview ==<br />
<br />
ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC). An example is shown below:<br />
<br />
[[Image:ThreadScope-Screenshot1.png]]<br />
<br />
ThreadScope version 0.2.0 can be used to help debug performance issues with parallel and concurrent Haskell programs. The program has the following features.<br />
<br />
* The program displays the activity on each Haskell Execution Context (HEC) which roughly corresponds to an operating system thread. For each thread you can see whether it is running a Haskell thread or performing garbage collection. You can find out information about when Haskell threads are ready to run and information about why a Haskell thread was suspended.<br />
<br />
* An activity profile indicates the rough utilization of the HECs and when the number of HECs are greater than the number of processing cores this gives a rough guide to the overall utilization.<br />
<br />
* You can place bookmarks at various points in the time profile to help with navigation. Bookmarks can be emitted from Haskell code using the `traceEvent` action.<br />
<br />
* You can view the rate at which "par sparks" are created and evaluated during the program, and the size of the spark queue on each HEC. (This feature requires GHC-7.3 or later which is currently the [http://hackage.haskell.org/trac/ghc/wiki/Building development version].)<br />
<br />
== Using ThreadScope ==<br />
<br />
To compile a program for parallel profiling use the -eventlog flag and you will also want to use the -threaded flag to compile with the multi-threaded runtime e.g.<br />
<br />
ghc -threaded -eventlog -rtsopts --make Wombat.hs<br />
<br />
To execute a program and generate a profile use the -ls flag after +RTS. Then pass the profile to ThreadScope:<br />
<br />
./Wombat +RTS -ls -N2<br />
threadscope Wombat.eventlog # on Windows: Wombat.exe.eventlog <br />
<br />
The -N2 flag specifies the use of two Haskell Execution Contexts (i.e. cores). Once the program has been run it will produce a profile file called Wombat.eventlog or Wombat.exe.eventlog (depending on your operating system). You can now view this file with threadscope by specifying the eventlog filename as a command line argument or by navigating to it from the File menu of ThreadScope.<br />
<br />
== Installing ThreadScope ==<br />
<br />
The recommendation is to use the [http://hackage.haskell.org/platform/ Haskell Platform]. This includes GHC and the cabal package tool. At minimum you need GHC-6.12.<br />
<br />
ThreadScope itself is [http://hackage.haskell.org/package/threadscope available from hackage].<br />
<br />
ThreadScope has a dependency on the Haskell Gtk+ binding (Gtk2Hs) which involves a bit of manual work on Windows and Mac OS X to install the Gtk+ C libraries.<br />
<br />
See the Gtk2Hs installation instructions for details:<br />
<br />
* [[Gtk2Hs/Linux]] (and other unix)<br />
* [[Gtk2Hs/Windows]]<br />
* [[Gtk2Hs/Mac]]<br />
<br />
Once you have the Gtk+ C libraries installed it is just a matter of running:<br />
<br />
cabal install threadscope<br />
<br />
You can now try to run ThreadScope to make sure it built correctly by viewing a built-in sample trace:<br />
<br />
threadscope --test ch8<br />
<br />
You should see something like<br />
[[Image:ThreadScope-ch8.png|600px]]<br />
<br />
== More Information ==<br />
<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell].<br />
* [http://research.microsoft.com/apps/pubs/default.aspx?id=74058 A Tutorial on Parallel and Concurrent Programming in Haskell].<br />
* A [http://www.youtube.com/watch?v=qZXq8fxebKU video] by Simon Marlow which demos ThreadScope.<br />
<br />
Please send comments, corrections etc. to [mailto:satnams@microsoft.com satnams@microsoft.com]<br />
<br />
You may also wish to join the [http://groups.google.com/group/parallel-haskell parallel-haskell google group].<br />
<br />
== Development and reporting bugs ==<br />
<br />
There is a [http://trac.haskell.org/ThreadScope/ bug tracker and developer wiki].<br />
<br />
The source for ghc-events and threadscope is available:<br />
<br />
darcs get http://code.haskell.org/ghc-events/<br />
darcs get http://code.haskell.org/ThreadScope/<br />
<br />
== People ==<br />
<br />
* Donnie Jones, donnie@darthik.com<br />
* Simon Marlow, simonmar@microsoft.com, http://www.haskell.org/~simonmar/<br />
* Satnam Singh, s.singh@acm.org, http://cs.bham.ac.uk/~singhsu/<br />
* Duncan Coutts, duncan@well-typed.com, http://www.well-typed.com/who_we_are<br />
* Mikolaj Konarski, mikolaj@well-typed.com<br />
* Nicolas Wu, nick@well-typed.com<br />
<br />
== Publications and Talks ==<br />
<br />
Simon Marlow, Simon Peyton Jones, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=79856 Runtime Support for Multicore Haskell], in ''ICFP 2009'', Association for Computing Machinery, Inc., 5 September 2009<br />
<br />
Don Jones Jr., Simon Marlow, and Satnam Singh, [http://research.microsoft.com/apps/pubs/default.aspx?id=80976 Parallel Performance Tuning for Haskell], in ''ACM SIGPLAN 2009 Haskell Symposium'', Association for Computing Machinery, Inc., 3 September 2009<br />
<br />
Duncan Coutts, Mikolaj Konarski and Andres Loeh, [[HaskellImplementorsWorkshop/2011/Coutts|Spark Visualization in ThreadScope]], Haskell Implementors Workshop 2011</div>Mikolajhttps://wiki.haskell.org/index.php?title=CamHac/PostHackathonReport&diff=41624CamHac/PostHackathonReport2011-08-15T12:15:35Z<p>Mikolaj: /* LambdaHack */</p>
<hr />
<div>= Post-Hackathon Report =<br />
<br />
This page is for listing what was done during the Hackathon. Please add a short description of what you worked on, with links to relevant blog posts, hackage packages, commits, etc.<br />
<br />
== fclabels 1.0 release ==<br />
<br />
New release of the '''fclabels''' package. The new package has a lot of code and documentation cleanups, support for partial labels in the case of multi-constructor datatypes and is about 20x as fast for setting and modifying as the previous version. Thanks everyone for helping me out!<br />
<br />
Hackage: http://hackage.haskell.org/package/fclabels-1.0.1<br />
<br />
Github: http://github.com/sebastiaanvisser/fclabels<br />
<br />
== GHC and base library improvements ==<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5413 Add primops for bit population count]. These primops compile down to `POPCNT` instructions where available and fast fallbacks (implemented in C) otherwise.<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5414 Add unchecked left and right bit shifts]: The Data.Bits.shift method uses a branch to check if the shift amount is larger than the word size and returns 0 in these cases. This extra safety makes performance worse in bit twiddling code.<br />
<br />
* Discussed unpacking of enums in GHC (not yet implemented).<br />
<br />
* Discussed refactoring compiler/util/Digraph.lhs into a reusable graph combinator library, along with porting over hoopl's control-flow-graph traversals (not yet implemented).<br />
<br />
== Context synonym families ==<br />
<br />
Started working on context synonym families and indexed context synonym families. We make this work by giving evidence the new kind Fact, and then allowing any type of kind Fact to appear on the left of a => arrow.<br />
<br />
(Max Bolingbroke, Dominic Orchard and Nicolas Wu)<br />
<br />
== Darcs ==<br />
<br />
New contributors:<br />
<br />
* use red text to report when <font color="red">we have a conflict</font> ([http://bugs.darcs.net/issue1681 issue1681],[http://bugs.darcs.net/patch646 patch646], Jeff Foster)<br />
* support 'since' in English dates parser<br />
* filter SSH output ([http://bugs.darcs.net/issue845 issue845], Jeff Foster and Sebastian Korten)<br />
* support arbitrary darcs command in darcs-test (Alexander Njemz)<br />
* output ISO dates in darcs changes? ([http://bugs.darcs.net/issue140 issue140], Alexander N, may be not a good idea)<br />
* add a last regrets prompt to interactive patch selection ([http://bugs.darcs.net/issue1920 issue1920], [http://bugs.darcs.net/patch655 patch655], Johannes Weiß)<br />
* [in-progress] support removing changes in amend-record ([http://bugs.darcs.net/issue1470 issue1470], Johannes Weiß)<br />
<br />
== wxHaskell ==<br />
<br />
* a Windows build fix ([https://sourceforge.net/mailarchive/forum.php?thread_name=CAA5%3D7kb%2BCmJ178tvrxtOnuswWBeBxYpSotiQWRXuKE3m_sByXA%40mail.gmail.com&forum_name=wxhaskell-devel patch])<br />
* a fix for [https://sourceforge.net/tracker/?func=detail&aid=3019730&group_id=73133&atid=536845 an issue with colorDialog] ([https://sourceforge.net/mailarchive/forum.php?thread_name=20110813150933.GA758%40dewdrop.local&forum_name=wxhaskell-devel patch])<br />
<br />
== hCole-server ==<br />
<br />
* A Snap-based web application that interacts with the COLE (see http://portal.acm.org/citation.cfm?id=1356080 and http://portal.acm.org/citation.cfm?id=1772965) framework for exploring compiler optimisation levels. The purpose of the web app is that collaborators can submit optimisation sequences to the COLE backend and retrieve the results when they are available after measuring.<br />
* Git repository of the web application can be found at https://github.com/itkovian/hcole-server<br />
<br />
== GObject Introspection ==<br />
<br />
* Work-in-progress binding generator for GObject-based libraries such as Gtk+ 3.<br />
* Started switching to [http://hackage.haskell.org/package/haskell-src-exts-1.11.1 haskell-src-exts] for code generation.<br />
* Patches currently on the ''camhac'' branch on [https://gitorious.org/haskell-gi/haskell-gi gitorious].<br />
<br />
== Snap Framework ==<br />
<br />
* Snap 0.5.3 and 0.5.3.1 released!<br />
<br />
* Several bugs squashed or nearly-squashed: [https://github.com/snapframework/snap-core/issues/2 #2] (IPv6 support, from Vlad Hanciuta), [https://github.com/snapframework/snap-core/issues/77 #77], [https://github.com/snapframework/snap-core/issues/78 #78], and [https://github.com/snapframework/snap-core/issues/79 #79].<br />
<br />
* File upload code: replaced "openBinaryTempFile" with something less dumb (mkstemp) on unix, and fixed some iteratee cleanup problems using an MVar finalizer<br />
<br />
* Removed the template haskell code from Data.Concurrent.HashMap in snap-server<br />
<br />
* Some work has been done on the authentication Snaplet, including an (incomplete) HDBC backend for it. An early work-in-progress can be found here: https://github.com/norm2782/snap<br />
* An example application which uses Snap 0.6 has been improved to use the authentication Snaplet. Another work-in-progress: https://github.com/norm2782/snap-guestbook<br />
<br />
== Data.Text ==<br />
<br />
* Further benchmarking, bug fixing to support the UTF-8 port<br />
* Progress can be found in the ''utf8'' branch [http://github.com/jaspervdj/text here]<br />
* The [http://jaspervdj.be/files/text.html GSoC project] is basically done, next up is writing a summary report of benchmark results and what advantages and disadvantages come with the port<br />
<br />
== hs-poker ==<br />
<br />
* A "redneck naive" poker hand evaluator. Code is on github (https://github.com/fffej/HS-Poker). Hopefully intend to turn this into a poker bot playground for Haskell (Jeff / Sebastian)<br />
<br />
== haskell-mpi ==<br />
* New version 1.1.0 uploaded to hackage, including support for more MPI implementations, bugfixes and general awesomness<br />
* Upcoming Monad Reader would feature and article about parallel programming with MPI, written during the course of the hackathon (Dmitry Astapov)<br />
<br />
== HTTP ==<br />
<br />
Some work was done on setting up tests for HTTP. Additionally, some bugs were fixed, code was cleaned up, warnings removed and a start was made on improving the Network.Browser module.<br />
<br />
== EchoNest API ==<br />
<br />
A very nascent API for accessing the EchoNest Music API http://developer.echonest.com/docs/v4/index.html . Coming to a GitHub server in the near future, as soon as it stops looking so ugly (Ian Knopke / Jose Calderon).<br />
<br />
== TagSoup/Derive/HLint ==<br />
<br />
All the above packages got upgraded to the latest GHC, along with a few bug fixes (Derive now deals with singleton constructors with no fields, HLint now supports an ANSI CPP flag) (Neil Mitchell)<br />
<br />
== Hoogle ==<br />
<br />
The current Hoogle parser for user queries is old, doesn't parse everything correctly, and in particular doesn't deal well with partial queries (when the user is still typing their search). We discussed lots of edge cases, and started implementing a new version (Jacek Generowicz, with guidance from Neil Mitchell)<br />
<br />
== CmdArgs ==<br />
<br />
The CmdArgs package lets you concisely specific command line arguments. I ported the package to GHC 7.2.1, did some cleanups, and fixed some bugs (you can now use Int64 etc). I then started working on two new features: 1) Given a CmdArgs program (such as Hoogle) you can specify you want to enter the arguments via a GUI hosted in the web browser. Currently the GUI is a simple textbox with realtime validation, but in future it will become a structured command line argument editor based on the options to your tool. 2) Adding automatic bash autocompletion - some of the work has been done, but the details are not yet finished. (Neil Mitchell)<br />
<br />
== Hackage server ==<br />
<br />
Further refactoring work, simplification of HTTP basic/digest authentication code. Started work on serving package changelogs. Improvements to admin pages to make various features more discoverable (Duncan Coutts, Stefan Wehr, Ben Millwood).<br />
<br />
Hackathon branch of the code is at (not all patches have been submitted yet):<br />
<br />
darcs get http://code.haskell.org/~duncan/camhac/hackage-server/<br />
<br />
== Bittorrent DHT ==<br />
<br />
Initial work on implementing [http://www.bittorrent.org/beps/bep_0005.html BEP 0005] in Haskell. Some core data structures seem to be working (although untested) and I'm currently working on the protocol. I will probably merge this into Haskell Torrent when everything is working, but I intend to keep the library available separately as I see potential uses for the network other than Bittorrent. (Alex Horsman)<br />
<br />
https://github.com/aninhumer/haskell-dht<br />
<br />
== LambdaHack ==<br />
<br />
Discussed gameplay and hacks, annotated the code with the discussion results and finally accepted [https://github.com/kosmikus/LambdaHack/pull/11 the pull request] from [http://hackage.haskell.org/package/Allure Allure of the Stars] to [http://hackage.haskell.org/package/LambdaHack LambdaHack].</div>Mikolajhttps://wiki.haskell.org/index.php?title=CamHac/PostHackathonReport&diff=41623CamHac/PostHackathonReport2011-08-15T12:14:17Z<p>Mikolaj: /* LambdaHack */</p>
<hr />
<div>= Post-Hackathon Report =<br />
<br />
This page is for listing what was done during the Hackathon. Please add a short description of what you worked on, with links to relevant blog posts, hackage packages, commits, etc.<br />
<br />
== fclabels 1.0 release ==<br />
<br />
New release of the '''fclabels''' package. The new package has a lot of code and documentation cleanups, support for partial labels in the case of multi-constructor datatypes and is about 20x as fast for setting and modifying as the previous version. Thanks everyone for helping me out!<br />
<br />
Hackage: http://hackage.haskell.org/package/fclabels-1.0.1<br />
<br />
Github: http://github.com/sebastiaanvisser/fclabels<br />
<br />
== GHC and base library improvements ==<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5413 Add primops for bit population count]. These primops compile down to `POPCNT` instructions where available and fast fallbacks (implemented in C) otherwise.<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5414 Add unchecked left and right bit shifts]: The Data.Bits.shift method uses a branch to check if the shift amount is larger than the word size and returns 0 in these cases. This extra safety makes performance worse in bit twiddling code.<br />
<br />
* Discussed unpacking of enums in GHC (not yet implemented).<br />
<br />
* Discussed refactoring compiler/util/Digraph.lhs into a reusable graph combinator library, along with porting over hoopl's control-flow-graph traversals (not yet implemented).<br />
<br />
== Context synonym families ==<br />
<br />
Started working on context synonym families and indexed context synonym families. We make this work by giving evidence the new kind Fact, and then allowing any type of kind Fact to appear on the left of a => arrow.<br />
<br />
(Max Bolingbroke, Dominic Orchard and Nicolas Wu)<br />
<br />
== Darcs ==<br />
<br />
New contributors:<br />
<br />
* use red text to report when <font color="red">we have a conflict</font> ([http://bugs.darcs.net/issue1681 issue1681],[http://bugs.darcs.net/patch646 patch646], Jeff Foster)<br />
* support 'since' in English dates parser<br />
* filter SSH output ([http://bugs.darcs.net/issue845 issue845], Jeff Foster and Sebastian Korten)<br />
* support arbitrary darcs command in darcs-test (Alexander Njemz)<br />
* output ISO dates in darcs changes? ([http://bugs.darcs.net/issue140 issue140], Alexander N, may be not a good idea)<br />
* add a last regrets prompt to interactive patch selection ([http://bugs.darcs.net/issue1920 issue1920], [http://bugs.darcs.net/patch655 patch655], Johannes Weiß)<br />
* [in-progress] support removing changes in amend-record ([http://bugs.darcs.net/issue1470 issue1470], Johannes Weiß)<br />
<br />
== wxHaskell ==<br />
<br />
* a Windows build fix ([https://sourceforge.net/mailarchive/forum.php?thread_name=CAA5%3D7kb%2BCmJ178tvrxtOnuswWBeBxYpSotiQWRXuKE3m_sByXA%40mail.gmail.com&forum_name=wxhaskell-devel patch])<br />
* a fix for [https://sourceforge.net/tracker/?func=detail&aid=3019730&group_id=73133&atid=536845 an issue with colorDialog] ([https://sourceforge.net/mailarchive/forum.php?thread_name=20110813150933.GA758%40dewdrop.local&forum_name=wxhaskell-devel patch])<br />
<br />
== hCole-server ==<br />
<br />
* A Snap-based web application that interacts with the COLE (see http://portal.acm.org/citation.cfm?id=1356080 and http://portal.acm.org/citation.cfm?id=1772965) framework for exploring compiler optimisation levels. The purpose of the web app is that collaborators can submit optimisation sequences to the COLE backend and retrieve the results when they are available after measuring.<br />
* Git repository of the web application can be found at https://github.com/itkovian/hcole-server<br />
<br />
== GObject Introspection ==<br />
<br />
* Work-in-progress binding generator for GObject-based libraries such as Gtk+ 3.<br />
* Started switching to [http://hackage.haskell.org/package/haskell-src-exts-1.11.1 haskell-src-exts] for code generation.<br />
* Patches currently on the ''camhac'' branch on [https://gitorious.org/haskell-gi/haskell-gi gitorious].<br />
<br />
== Snap Framework ==<br />
<br />
* Snap 0.5.3 and 0.5.3.1 released!<br />
<br />
* Several bugs squashed or nearly-squashed: [https://github.com/snapframework/snap-core/issues/2 #2] (IPv6 support, from Vlad Hanciuta), [https://github.com/snapframework/snap-core/issues/77 #77], [https://github.com/snapframework/snap-core/issues/78 #78], and [https://github.com/snapframework/snap-core/issues/79 #79].<br />
<br />
* File upload code: replaced "openBinaryTempFile" with something less dumb (mkstemp) on unix, and fixed some iteratee cleanup problems using an MVar finalizer<br />
<br />
* Removed the template haskell code from Data.Concurrent.HashMap in snap-server<br />
<br />
* Some work has been done on the authentication Snaplet, including an (incomplete) HDBC backend for it. An early work-in-progress can be found here: https://github.com/norm2782/snap<br />
* An example application which uses Snap 0.6 has been improved to use the authentication Snaplet. Another work-in-progress: https://github.com/norm2782/snap-guestbook<br />
<br />
== Data.Text ==<br />
<br />
* Further benchmarking, bug fixing to support the UTF-8 port<br />
* Progress can be found in the ''utf8'' branch [http://github.com/jaspervdj/text here]<br />
* The [http://jaspervdj.be/files/text.html GSoC project] is basically done, next up is writing a summary report of benchmark results and what advantages and disadvantages come with the port<br />
<br />
== hs-poker ==<br />
<br />
* A "redneck naive" poker hand evaluator. Code is on github (https://github.com/fffej/HS-Poker). Hopefully intend to turn this into a poker bot playground for Haskell (Jeff / Sebastian)<br />
<br />
== haskell-mpi ==<br />
* New version 1.1.0 uploaded to hackage, including support for more MPI implementations, bugfixes and general awesomness<br />
* Upcoming Monad Reader would feature and article about parallel programming with MPI, written during the course of the hackathon (Dmitry Astapov)<br />
<br />
== HTTP ==<br />
<br />
Some work was done on setting up tests for HTTP. Additionally, some bugs were fixed, code was cleaned up, warnings removed and a start was made on improving the Network.Browser module.<br />
<br />
== EchoNest API ==<br />
<br />
A very nascent API for accessing the EchoNest Music API http://developer.echonest.com/docs/v4/index.html . Coming to a GitHub server in the near future, as soon as it stops looking so ugly (Ian Knopke / Jose Calderon).<br />
<br />
== TagSoup/Derive/HLint ==<br />
<br />
All the above packages got upgraded to the latest GHC, along with a few bug fixes (Derive now deals with singleton constructors with no fields, HLint now supports an ANSI CPP flag) (Neil Mitchell)<br />
<br />
== Hoogle ==<br />
<br />
The current Hoogle parser for user queries is old, doesn't parse everything correctly, and in particular doesn't deal well with partial queries (when the user is still typing their search). We discussed lots of edge cases, and started implementing a new version (Jacek Generowicz, with guidance from Neil Mitchell)<br />
<br />
== CmdArgs ==<br />
<br />
The CmdArgs package lets you concisely specific command line arguments. I ported the package to GHC 7.2.1, did some cleanups, and fixed some bugs (you can now use Int64 etc). I then started working on two new features: 1) Given a CmdArgs program (such as Hoogle) you can specify you want to enter the arguments via a GUI hosted in the web browser. Currently the GUI is a simple textbox with realtime validation, but in future it will become a structured command line argument editor based on the options to your tool. 2) Adding automatic bash autocompletion - some of the work has been done, but the details are not yet finished. (Neil Mitchell)<br />
<br />
== Hackage server ==<br />
<br />
Further refactoring work, simplification of HTTP basic/digest authentication code. Started work on serving package changelogs. Improvements to admin pages to make various features more discoverable (Duncan Coutts, Stefan Wehr, Ben Millwood).<br />
<br />
Hackathon branch of the code is at (not all patches have been submitted yet):<br />
<br />
darcs get http://code.haskell.org/~duncan/camhac/hackage-server/<br />
<br />
== Bittorrent DHT ==<br />
<br />
Initial work on implementing [http://www.bittorrent.org/beps/bep_0005.html BEP 0005] in Haskell. Some core data structures seem to be working (although untested) and I'm currently working on the protocol. I will probably merge this into Haskell Torrent when everything is working, but I intend to keep the library available separately as I see potential uses for the network other than Bittorrent. (Alex Horsman)<br />
<br />
https://github.com/aninhumer/haskell-dht<br />
<br />
== LambdaHack ==<br />
<br />
Discussed, annotated the code with the discussion results and finally accepted [https://github.com/kosmikus/LambdaHack/pull/11 the pull request] from [http://hackage.haskell.org/package/Allure Allure of the Stars] to [http://hackage.haskell.org/package/LambdaHack LambdaHack].</div>Mikolajhttps://wiki.haskell.org/index.php?title=CamHac/PostHackathonReport&diff=41622CamHac/PostHackathonReport2011-08-15T12:08:55Z<p>Mikolaj: /* LambdaHack */</p>
<hr />
<div>= Post-Hackathon Report =<br />
<br />
This page is for listing what was done during the Hackathon. Please add a short description of what you worked on, with links to relevant blog posts, hackage packages, commits, etc.<br />
<br />
== fclabels 1.0 release ==<br />
<br />
New release of the '''fclabels''' package. The new package has a lot of code and documentation cleanups, support for partial labels in the case of multi-constructor datatypes and is about 20x as fast for setting and modifying as the previous version. Thanks everyone for helping me out!<br />
<br />
Hackage: http://hackage.haskell.org/package/fclabels-1.0.1<br />
<br />
Github: http://github.com/sebastiaanvisser/fclabels<br />
<br />
== GHC and base library improvements ==<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5413 Add primops for bit population count]. These primops compile down to `POPCNT` instructions where available and fast fallbacks (implemented in C) otherwise.<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5414 Add unchecked left and right bit shifts]: The Data.Bits.shift method uses a branch to check if the shift amount is larger than the word size and returns 0 in these cases. This extra safety makes performance worse in bit twiddling code.<br />
<br />
* Discussed unpacking of enums in GHC (not yet implemented).<br />
<br />
* Discussed refactoring compiler/util/Digraph.lhs into a reusable graph combinator library, along with porting over hoopl's control-flow-graph traversals (not yet implemented).<br />
<br />
== Context synonym families ==<br />
<br />
Started working on context synonym families and indexed context synonym families. We make this work by giving evidence the new kind Fact, and then allowing any type of kind Fact to appear on the left of a => arrow.<br />
<br />
(Max Bolingbroke, Dominic Orchard and Nicolas Wu)<br />
<br />
== Darcs ==<br />
<br />
New contributors:<br />
<br />
* use red text to report when <font color="red">we have a conflict</font> ([http://bugs.darcs.net/issue1681 issue1681],[http://bugs.darcs.net/patch646 patch646], Jeff Foster)<br />
* support 'since' in English dates parser<br />
* filter SSH output ([http://bugs.darcs.net/issue845 issue845], Jeff Foster and Sebastian Korten)<br />
* support arbitrary darcs command in darcs-test (Alexander Njemz)<br />
* output ISO dates in darcs changes? ([http://bugs.darcs.net/issue140 issue140], Alexander N, may be not a good idea)<br />
* add a last regrets prompt to interactive patch selection ([http://bugs.darcs.net/issue1920 issue1920], [http://bugs.darcs.net/patch655 patch655], Johannes Weiß)<br />
* [in-progress] support removing changes in amend-record ([http://bugs.darcs.net/issue1470 issue1470], Johannes Weiß)<br />
<br />
== wxHaskell ==<br />
<br />
* a Windows build fix ([https://sourceforge.net/mailarchive/forum.php?thread_name=CAA5%3D7kb%2BCmJ178tvrxtOnuswWBeBxYpSotiQWRXuKE3m_sByXA%40mail.gmail.com&forum_name=wxhaskell-devel patch])<br />
* a fix for [https://sourceforge.net/tracker/?func=detail&aid=3019730&group_id=73133&atid=536845 an issue with colorDialog] ([https://sourceforge.net/mailarchive/forum.php?thread_name=20110813150933.GA758%40dewdrop.local&forum_name=wxhaskell-devel patch])<br />
<br />
== hCole-server ==<br />
<br />
* A Snap-based web application that interacts with the COLE (see http://portal.acm.org/citation.cfm?id=1356080 and http://portal.acm.org/citation.cfm?id=1772965) framework for exploring compiler optimisation levels. The purpose of the web app is that collaborators can submit optimisation sequences to the COLE backend and retrieve the results when they are available after measuring.<br />
* Git repository of the web application can be found at https://github.com/itkovian/hcole-server<br />
<br />
== GObject Introspection ==<br />
<br />
* Work-in-progress binding generator for GObject-based libraries such as Gtk+ 3.<br />
* Started switching to [http://hackage.haskell.org/package/haskell-src-exts-1.11.1 haskell-src-exts] for code generation.<br />
* Patches currently on the ''camhac'' branch on [https://gitorious.org/haskell-gi/haskell-gi gitorious].<br />
<br />
== Snap Framework ==<br />
<br />
* Snap 0.5.3 and 0.5.3.1 released!<br />
<br />
* Several bugs squashed or nearly-squashed: [https://github.com/snapframework/snap-core/issues/2 #2] (IPv6 support, from Vlad Hanciuta), [https://github.com/snapframework/snap-core/issues/77 #77], [https://github.com/snapframework/snap-core/issues/78 #78], and [https://github.com/snapframework/snap-core/issues/79 #79].<br />
<br />
* File upload code: replaced "openBinaryTempFile" with something less dumb (mkstemp) on unix, and fixed some iteratee cleanup problems using an MVar finalizer<br />
<br />
* Removed the template haskell code from Data.Concurrent.HashMap in snap-server<br />
<br />
* Some work has been done on the authentication Snaplet, including an (incomplete) HDBC backend for it. An early work-in-progress can be found here: https://github.com/norm2782/snap<br />
* An example application which uses Snap 0.6 has been improved to use the authentication Snaplet. Another work-in-progress: https://github.com/norm2782/snap-guestbook<br />
<br />
== Data.Text ==<br />
<br />
* Further benchmarking, bug fixing to support the UTF-8 port<br />
* Progress can be found in the ''utf8'' branch [http://github.com/jaspervdj/text here]<br />
* The [http://jaspervdj.be/files/text.html GSoC project] is basically done, next up is writing a summary report of benchmark results and what advantages and disadvantages come with the port<br />
<br />
== hs-poker ==<br />
<br />
* A "redneck naive" poker hand evaluator. Code is on github (https://github.com/fffej/HS-Poker). Hopefully intend to turn this into a poker bot playground for Haskell (Jeff / Sebastian)<br />
<br />
== haskell-mpi ==<br />
* New version 1.1.0 uploaded to hackage, including support for more MPI implementations, bugfixes and general awesomness<br />
* Upcoming Monad Reader would feature and article about parallel programming with MPI, written during the course of the hackathon (Dmitry Astapov)<br />
<br />
== HTTP ==<br />
<br />
Some work was done on setting up tests for HTTP. Additionally, some bugs were fixed, code was cleaned up, warnings removed and a start was made on improving the Network.Browser module.<br />
<br />
== EchoNest API ==<br />
<br />
A very nascent API for accessing the EchoNest Music API http://developer.echonest.com/docs/v4/index.html . Coming to a GitHub server in the near future, as soon as it stops looking so ugly (Ian Knopke / Jose Calderon).<br />
<br />
== TagSoup/Derive/HLint ==<br />
<br />
All the above packages got upgraded to the latest GHC, along with a few bug fixes (Derive now deals with singleton constructors with no fields, HLint now supports an ANSI CPP flag) (Neil Mitchell)<br />
<br />
== Hoogle ==<br />
<br />
The current Hoogle parser for user queries is old, doesn't parse everything correctly, and in particular doesn't deal well with partial queries (when the user is still typing their search). We discussed lots of edge cases, and started implementing a new version (Jacek Generowicz, with guidance from Neil Mitchell)<br />
<br />
== CmdArgs ==<br />
<br />
The CmdArgs package lets you concisely specific command line arguments. I ported the package to GHC 7.2.1, did some cleanups, and fixed some bugs (you can now use Int64 etc). I then started working on two new features: 1) Given a CmdArgs program (such as Hoogle) you can specify you want to enter the arguments via a GUI hosted in the web browser. Currently the GUI is a simple textbox with realtime validation, but in future it will become a structured command line argument editor based on the options to your tool. 2) Adding automatic bash autocompletion - some of the work has been done, but the details are not yet finished. (Neil Mitchell)<br />
<br />
== Hackage server ==<br />
<br />
Further refactoring work, simplification of HTTP basic/digest authentication code. Started work on serving package changelogs. Improvements to admin pages to make various features more discoverable (Duncan Coutts, Stefan Wehr, Ben Millwood).<br />
<br />
Hackathon branch of the code is at (not all patches have been submitted yet):<br />
<br />
darcs get http://code.haskell.org/~duncan/camhac/hackage-server/<br />
<br />
== Bittorrent DHT ==<br />
<br />
Initial work on implementing [http://www.bittorrent.org/beps/bep_0005.html BEP 0005] in Haskell. Some core data structures seem to be working (although untested) and I'm currently working on the protocol. I will probably merge this into Haskell Torrent when everything is working, but I intend to keep the library available separately as I see potential uses for the network other than Bittorrent. (Alex Horsman)<br />
<br />
https://github.com/aninhumer/haskell-dht<br />
<br />
== LambdaHack ==<br />
<br />
Discussed, annotated the code with the discussion results and finally accepted [https://github.com/kosmikus/LambdaHack/pull/11 the pull request] from [https://github.com/Mikolaj/Allure Allure of the Stars] to [https://github.com/kosmikus/LambdaHack LambdaHack].</div>Mikolajhttps://wiki.haskell.org/index.php?title=CamHac/PostHackathonReport&diff=41621CamHac/PostHackathonReport2011-08-15T12:08:20Z<p>Mikolaj: add LambdaHack hacks</p>
<hr />
<div>= Post-Hackathon Report =<br />
<br />
This page is for listing what was done during the Hackathon. Please add a short description of what you worked on, with links to relevant blog posts, hackage packages, commits, etc.<br />
<br />
== fclabels 1.0 release ==<br />
<br />
New release of the '''fclabels''' package. The new package has a lot of code and documentation cleanups, support for partial labels in the case of multi-constructor datatypes and is about 20x as fast for setting and modifying as the previous version. Thanks everyone for helping me out!<br />
<br />
Hackage: http://hackage.haskell.org/package/fclabels-1.0.1<br />
<br />
Github: http://github.com/sebastiaanvisser/fclabels<br />
<br />
== GHC and base library improvements ==<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5413 Add primops for bit population count]. These primops compile down to `POPCNT` instructions where available and fast fallbacks (implemented in C) otherwise.<br />
<br />
* [http://hackage.haskell.org/trac/ghc/ticket/5414 Add unchecked left and right bit shifts]: The Data.Bits.shift method uses a branch to check if the shift amount is larger than the word size and returns 0 in these cases. This extra safety makes performance worse in bit twiddling code.<br />
<br />
* Discussed unpacking of enums in GHC (not yet implemented).<br />
<br />
* Discussed refactoring compiler/util/Digraph.lhs into a reusable graph combinator library, along with porting over hoopl's control-flow-graph traversals (not yet implemented).<br />
<br />
== Context synonym families ==<br />
<br />
Started working on context synonym families and indexed context synonym families. We make this work by giving evidence the new kind Fact, and then allowing any type of kind Fact to appear on the left of a => arrow.<br />
<br />
(Max Bolingbroke, Dominic Orchard and Nicolas Wu)<br />
<br />
== Darcs ==<br />
<br />
New contributors:<br />
<br />
* use red text to report when <font color="red">we have a conflict</font> ([http://bugs.darcs.net/issue1681 issue1681],[http://bugs.darcs.net/patch646 patch646], Jeff Foster)<br />
* support 'since' in English dates parser<br />
* filter SSH output ([http://bugs.darcs.net/issue845 issue845], Jeff Foster and Sebastian Korten)<br />
* support arbitrary darcs command in darcs-test (Alexander Njemz)<br />
* output ISO dates in darcs changes? ([http://bugs.darcs.net/issue140 issue140], Alexander N, may be not a good idea)<br />
* add a last regrets prompt to interactive patch selection ([http://bugs.darcs.net/issue1920 issue1920], [http://bugs.darcs.net/patch655 patch655], Johannes Weiß)<br />
* [in-progress] support removing changes in amend-record ([http://bugs.darcs.net/issue1470 issue1470], Johannes Weiß)<br />
<br />
== wxHaskell ==<br />
<br />
* a Windows build fix ([https://sourceforge.net/mailarchive/forum.php?thread_name=CAA5%3D7kb%2BCmJ178tvrxtOnuswWBeBxYpSotiQWRXuKE3m_sByXA%40mail.gmail.com&forum_name=wxhaskell-devel patch])<br />
* a fix for [https://sourceforge.net/tracker/?func=detail&aid=3019730&group_id=73133&atid=536845 an issue with colorDialog] ([https://sourceforge.net/mailarchive/forum.php?thread_name=20110813150933.GA758%40dewdrop.local&forum_name=wxhaskell-devel patch])<br />
<br />
== hCole-server ==<br />
<br />
* A Snap-based web application that interacts with the COLE (see http://portal.acm.org/citation.cfm?id=1356080 and http://portal.acm.org/citation.cfm?id=1772965) framework for exploring compiler optimisation levels. The purpose of the web app is that collaborators can submit optimisation sequences to the COLE backend and retrieve the results when they are available after measuring.<br />
* Git repository of the web application can be found at https://github.com/itkovian/hcole-server<br />
<br />
== GObject Introspection ==<br />
<br />
* Work-in-progress binding generator for GObject-based libraries such as Gtk+ 3.<br />
* Started switching to [http://hackage.haskell.org/package/haskell-src-exts-1.11.1 haskell-src-exts] for code generation.<br />
* Patches currently on the ''camhac'' branch on [https://gitorious.org/haskell-gi/haskell-gi gitorious].<br />
<br />
== Snap Framework ==<br />
<br />
* Snap 0.5.3 and 0.5.3.1 released!<br />
<br />
* Several bugs squashed or nearly-squashed: [https://github.com/snapframework/snap-core/issues/2 #2] (IPv6 support, from Vlad Hanciuta), [https://github.com/snapframework/snap-core/issues/77 #77], [https://github.com/snapframework/snap-core/issues/78 #78], and [https://github.com/snapframework/snap-core/issues/79 #79].<br />
<br />
* File upload code: replaced "openBinaryTempFile" with something less dumb (mkstemp) on unix, and fixed some iteratee cleanup problems using an MVar finalizer<br />
<br />
* Removed the template haskell code from Data.Concurrent.HashMap in snap-server<br />
<br />
* Some work has been done on the authentication Snaplet, including an (incomplete) HDBC backend for it. An early work-in-progress can be found here: https://github.com/norm2782/snap<br />
* An example application which uses Snap 0.6 has been improved to use the authentication Snaplet. Another work-in-progress: https://github.com/norm2782/snap-guestbook<br />
<br />
== Data.Text ==<br />
<br />
* Further benchmarking, bug fixing to support the UTF-8 port<br />
* Progress can be found in the ''utf8'' branch [http://github.com/jaspervdj/text here]<br />
* The [http://jaspervdj.be/files/text.html GSoC project] is basically done, next up is writing a summary report of benchmark results and what advantages and disadvantages come with the port<br />
<br />
== hs-poker ==<br />
<br />
* A "redneck naive" poker hand evaluator. Code is on github (https://github.com/fffej/HS-Poker). Hopefully intend to turn this into a poker bot playground for Haskell (Jeff / Sebastian)<br />
<br />
== haskell-mpi ==<br />
* New version 1.1.0 uploaded to hackage, including support for more MPI implementations, bugfixes and general awesomness<br />
* Upcoming Monad Reader would feature and article about parallel programming with MPI, written during the course of the hackathon (Dmitry Astapov)<br />
<br />
== HTTP ==<br />
<br />
Some work was done on setting up tests for HTTP. Additionally, some bugs were fixed, code was cleaned up, warnings removed and a start was made on improving the Network.Browser module.<br />
<br />
== EchoNest API ==<br />
<br />
A very nascent API for accessing the EchoNest Music API http://developer.echonest.com/docs/v4/index.html . Coming to a GitHub server in the near future, as soon as it stops looking so ugly (Ian Knopke / Jose Calderon).<br />
<br />
== TagSoup/Derive/HLint ==<br />
<br />
All the above packages got upgraded to the latest GHC, along with a few bug fixes (Derive now deals with singleton constructors with no fields, HLint now supports an ANSI CPP flag) (Neil Mitchell)<br />
<br />
== Hoogle ==<br />
<br />
The current Hoogle parser for user queries is old, doesn't parse everything correctly, and in particular doesn't deal well with partial queries (when the user is still typing their search). We discussed lots of edge cases, and started implementing a new version (Jacek Generowicz, with guidance from Neil Mitchell)<br />
<br />
== CmdArgs ==<br />
<br />
The CmdArgs package lets you concisely specific command line arguments. I ported the package to GHC 7.2.1, did some cleanups, and fixed some bugs (you can now use Int64 etc). I then started working on two new features: 1) Given a CmdArgs program (such as Hoogle) you can specify you want to enter the arguments via a GUI hosted in the web browser. Currently the GUI is a simple textbox with realtime validation, but in future it will become a structured command line argument editor based on the options to your tool. 2) Adding automatic bash autocompletion - some of the work has been done, but the details are not yet finished. (Neil Mitchell)<br />
<br />
== Hackage server ==<br />
<br />
Further refactoring work, simplification of HTTP basic/digest authentication code. Started work on serving package changelogs. Improvements to admin pages to make various features more discoverable (Duncan Coutts, Stefan Wehr, Ben Millwood).<br />
<br />
Hackathon branch of the code is at (not all patches have been submitted yet):<br />
<br />
darcs get http://code.haskell.org/~duncan/camhac/hackage-server/<br />
<br />
== Bittorrent DHT ==<br />
<br />
Initial work on implementing [http://www.bittorrent.org/beps/bep_0005.html BEP 0005] in Haskell. Some core data structures seem to be working (although untested) and I'm currently working on the protocol. I will probably merge this into Haskell Torrent when everything is working, but I intend to keep the library available separately as I see potential uses for the network other than Bittorrent. (Alex Horsman)<br />
<br />
https://github.com/aninhumer/haskell-dht<br />
<br />
== LambdaHack ==<br />
<br />
Discussed, annotated the code with the discussion results and finally accepted [https://github.com/kosmikus/LambdaHack/pull/11 pull request] from [https://github.com/Mikolaj/Allure Allure of the Stars] to [https://github.com/kosmikus/LambdaHack LambdaHack].</div>Mikolajhttps://wiki.haskell.org/index.php?title=CamHac&diff=40161CamHac2011-05-28T11:04:11Z<p>Mikolaj: /* Attendees */</p>
<hr />
<div>Haskell Hackaton in Cambridge, UK, '''August 12-14, 2011'''<br />
<br />
== About ==<br />
<br />
Come and spend a weekend in Cambridge hacking Haskell code in great surroundings with fantastic company! Haskell Hackathons are a tradition where everyone is welcome; we get together, work on projects with others or just do your own thing, the overall goal being to improve the Haskell ecosystem.<br />
<br />
CamHac will be held from 12-14 August 2011, at [http://www.homertonconference.com/ Homerton College] in Cambridge. As with previous Hackathons, all are welcome -- you do not have to be a Haskell guru. All you need is a basic knowledge of Haskell, a willingness to learn, and a project you're excited to help with (or a project of your own to work on).<br />
<br />
There will be lots of hacking, good food, and, of course, fun! <br />
<br />
* Organiser: [mailto:marlowsd@gmail.com Simon Marlow] (<tt>JaffaCake</tt> on IRC)<br />
* Mailing list: [http://www.haskell.org/mailman/listinfo/hackathon hackathon@haskell.org]<br />
* IRC channel: #ghc on FreeNode<br />
<br />
Many thanks to [http://research.microsoft.com/en-us/labs/cambridge/default.aspx Microsoft Research Cambridge] for agreeing to sponsor the event.<br />
<br />
== Registration ==<br />
<br />
'''Registration deadline''': Friday 15th July 2011<br />
<br />
Registration is free. To register, please email [mailto:msrcevnt@microsoft.com msrcevnt@microsoft.com] stating that you would like to register for the "Haskell Hackathon", with the following information<br />
<br />
Full name:<br />
Which days you are attending on:<br />
day 1: yes/no<br />
day 2: yes/no<br />
day 3: yes/no<br />
Dietary requirements:<br />
<br />
The venue is '''limited to 50 people''', and registration is first-come first-served, so register quickly to reserve your place! (but only register if you definitely intend to come, and please let us know if you find you cannot make it for any reason after you have registered, so we can re-allocate your place).<br />
<br />
Some people will probably want to travel on Friday morning and join us later on that day - that's absolutely fine.<br />
<br />
== Venue ==<br />
<br />
We're in the [http://www.homertonconference.com/Horobin.html Horobin Room] of [http://www.homertonconference.com/ Homerton Conference Centre]. It is about [http://www.google.co.uk/maps?f=d&source=s_d&saddr=United+Kingdom+(Cambridge,+Railway+Station+(Stop+B))&daddr=CB2+8PH&hl=en&geocode=FehrHAMdjhUCACHpLU_p7S-CNg%3BFc5LHAMdNhMCACmn-uB8eXrYRzFlrDhff7fJ9A&mra=iwd&dirflg=w&sll=52.190667,0.134583&sspn=0.021547,0.040598&ie=UTF8&z=16 15 minutes walk from the train station], and Cambridge town centre is about 30 minutes walk.<br />
<br />
'''Times''': we have the room booked all day for the three days, and we'll probably start around 10am and finish around 6pm. Exact time details to be confirmed later. <br />
<br />
There will be WiFi access.<br />
<br />
There will be a projector for giving talks/demos. We will probably reserve a part of the time for talks and demos.<br />
<br />
== Food ==<br />
<br />
Tea and coffee will be supplied. We will have to go out to find lunch, but there are various places to eat and buy food at the [http://www.cambridge-x.co.uk Cambridge Leisure Park] a few minutes walk towards Cambridge town centre. In the evening we will probably head towards the town where there are plenty of good restaurants.<br />
<br />
== Local arrangements ==<br />
<br />
=== Getting to Cambridge ===<br />
<br />
==== By Plane ====<br />
<br />
* [http://www.stanstedairport.com/ Stansted Airport]: Stansted is the nearest of the London-area airports to Cambridge. It is mostly served by flights to and from mainland Europe, Ireland, and elsewhere in the UK. <br />
<br />
* [http://www.heathrowairport.com/ Heathrow Airport]: Heathrow is the principal London-area airport and one of the busiest in Europe with a wide range of national, European, and international services. <br />
<br />
* [http://www.gatwickairport.com/ Gatwick Airport]: Gatwick is the second "London" airport with a wide range of national, European and international services. <br />
<br />
* Other airports: [http://www.london-luton.co.uk/ Luton Airport], [http://www.norwichairport.co.uk/ Norwich airport], and [http://www.southendairport.com/ Southend airport] are other regional airports in the East Anglia region. If you use these, car or taxi is the best option for travel to Cambridge. <br />
<br />
==== Trains from London ====<br />
<br />
London has two train lines into Cambridge, London Kings Cross and London Liverpool Street. There is a regular service on both lines and duration is under an hour on the direct trains. Go to [http://www.nationalrail.co.uk National Rail] to check train times<br />
<br />
=== Getting to the venue ===<br />
<br />
[http://www.google.co.uk/maps?f=d&source=s_d&saddr=United+Kingdom+(Cambridge,+Railway+Station+(Stop+B))&daddr=CB2+8PH&hl=en&geocode=FehrHAMdjhUCACHpLU_p7S-CNg%3BFc5LHAMdNhMCACmn-uB8eXrYRzFlrDhff7fJ9A&mra=iwd&dirflg=w&sll=52.190667,0.134583&sspn=0.021547,0.040598&ie=UTF8&z=16 Walk from the train station] (about 15 minutes)<br />
<br />
[http://www.homertonconference.com/How-to-find-us.html How to find the venue]<br />
<br />
'''Local Taxis''': Panther Taxis 01223 715715<br />
<br />
=== Accommodation ===<br />
<br />
[http://www.visitcambridge.org/VisitCambridge/WhereToStay.aspx VisitCambridge: Where to Stay in Cambridge]<br />
<br />
The nearest hotels to the venue seem to be:<br />
<br />
* [http://www2.travelodge.co.uk/ Travelodge] (Cambridge Central) is just a few minutes walk from the venue. It is currently charging £65.80 per night for 11-14 August.<br />
* [http://www.helenhotel.co.uk/index.htm Helen Hotel]<br />
* [http://www.bandbincambridgeshire.co.uk/ Bridge Guest House]<br />
* [http://www.cheapguesthouses.com/ Fairways Guest House]<br />
* [http://www.abbeyfieldguesthouse.com/ Abbeyfield Guest House]<br />
* [http://rockviewguesthouse.co.uk/default.aspx Rock View Guest House]<br />
* [http://alingtonhouse.com/default.aspx Alington House Guest House]<br />
<br />
If you contact any of the above and find they're booked up, please remove them from the list.<br />
<br />
Microsoft Research recommends the following hotels to visitors, these are closer to the city centre but are probably a lot more expensive than those above:<br />
<br />
* [http://www.hilton.co.uk/cambridgegardenhouse Double Tree by Hilton Garden House Cambridge]<br />
* [http://www.ichotelsgroup.com/h/d/cp/1/en/hotel/cbguk Crowne Plaza Cambridge]<br />
* [http://www.devere.co.uk/our-locations/university-arms.html De Vere University Arms]<br />
<br />
== Projects ==<br />
<br />
Use this space to list projects you are interested in working on, and add your name to projects you are interested in helping with.<br />
<br />
* General hacking away at Snap Framework (exact goals TBD), perhaps adding/improving documentation/tutorials at the same time. (Jurriën Stutterheim)<br />
* Darcs<br />
<br />
== Attendees ==<br />
<br />
* Simon Marlow<br />
* Jurriën Stutterheim<br />
* Neil Mitchell<br />
* Jasper Van der Jeugt<br />
* Max Bolingbroke<br />
* Ben Millwood<br />
* Roman Leshchinskiy<br />
* Gregory Collins<br />
* Martijn van Steenbergen<br />
* Sjoerd Visscher<br />
* Sebastiaan Visser<br />
* Tom Lokhorst<br />
* Erik Hesselink<br />
* Jeff Foster<br />
* Sebastian Korten<br />
* Alessandro Vermeulen<br />
* Vlad Hanciuta<br />
* Ganesh Sittampalam<br />
* Eric Kow<br />
* Alexander Njemz<br />
* Mikolaj Konarski<br />
* Add your name here, once registered...</div>Mikolajhttps://wiki.haskell.org/index.php?title=Debugging&diff=39089Debugging2011-03-19T19:57:36Z<p>Mikolaj: /* Other tricks */ a broken link</p>
<hr />
<div>== Printf and friends ==<br />
The simplest approach is to use <tt>Debug.Trace.trace</tt>:<br />
<pre><br />
trace :: String -> a -> a<br />
</pre><br />
: "''When called, trace outputs the string in its first argument, before returning the second argument as its result.'"<br />
<br />
A common idiom to trace a function is:<br />
<pre><br />
myfun a b | trace ("myfun " ++ show a ++ " " ++ show b) False = undefined<br />
myfun a b = ...<br />
</pre><br />
The advantage is that disabling and enabling the trace takes only one line comment.<br />
<br />
You must keep in mind that due to lazy evaluation your traces will only print if the value they wrap is ever demanded.<br />
<br />
<br />
A more powerful<br />
alternative for this approach is [http://www.haskell.org/hood Hood]. Even if it hasn't been<br />
updated in some time, Hood works perfectly with the current ghc<br />
distribution. Even more, Hugs has it already integrated, see the [http://cvs.haskell.org/Hugs/pages/users_guide/observe.html manual page]. Add an <tt>import Observe</tt> and start inserting observations in your code.<br />
For instance:<br />
<pre><br />
import Hugs.Observe<br />
<br />
f' = observe "Informative name for f" f <br />
f x = if odd x then x*2 else 0<br />
</pre><br />
And then in hugs:<br />
<pre><br />
Main> map f' [1..5]<br />
[2,0,6,0,10]<br />
<br />
>>>>>>> Observations <<<<<<<br />
<br />
Informative name for f<br />
{ \ 5 -> 10<br />
, \ 4 -> 0<br />
, \ 3 -> 6<br />
, \ 2 -> 0<br />
, \ 1 -> 2<br />
}<br />
<br />
</pre><br />
<br />
outputs a report of all the invocations of f and their result.<br />
<br />
I have a handy bogus Hugs.Observe module with no-ops for the observations so that I don't need to remove them manually, expecting that the compiler will optimize them away. <br />
<br />
<br />
== The Safe Library ==<br />
<br />
There is a safe library of functions from the Prelude that can crash, see [http://www-users.cs.york.ac.uk/~ndm/safe/ the safe library]. If you get an error message such as "pattern match failure, head []", you can then use <tt>headNote "extra information"</tt> to get a more detailed error message for that particular call to <tt>head</tt>. The safe library also has functions that return default values and wrap their computation in <tt>Maybe</tt> as required.<br />
<br />
== Offline analysis of traces ==<br />
The most advanced debugging tools are based in offline analysis of traces. [http://www.haskell.org/hat Hat] is probably the most up-to-date tool for this, offering a comprehensive set of tools. [[User:NeilMitchell|Neil Mitchell]] has made available a Windows port of Hat at [http://www-users.cs.york.ac.uk/~ndm/projects/windows.php his site].<br />
<br />
The disadvantage of these tools is that they are not always compatible with the latest libraries, so you can put them to use only in some cases. <br />
<br />
''Some Hat user should complete this section''<br />
<br />
== Dynamic breakpoints in GHCi == <br />
Finally, the [[GHC/GHCi debugger| GHCi debugger]] project aims to bring dynamic<br />
breakpoints and intermediate values observation to GHCi in a near<br />
future. Right now the tool is only available from the site as a<br />
modified version of GHC, so unfortunately you will have to compile it<br />
yourself if you want to have it.<br />
<br />
This tool allows to set breakpoints in your code, directly from the GHCi command prompt. An example session:<br />
<pre><br />
*main:Main> :break add Main 2<br />
Breakpoint set at (2,15)<br />
*main:Main> qsort [10,9..1]<br />
Local bindings in scope:<br />
x :: a, xs :: [a], left :: [a], right :: [a]<br />
<br />
qsort2.hs:2:15-46> :sprint x<br />
x = _<br />
qsort2.hs:2:15-46> x<br />
This is an untyped, unevaluated computation. You can use seq to <br />
force its evaluation and then :print to recover its type<br />
qsort2.hs:2:15-46> seq x ()<br />
() <br />
qsort2.hs:2:15-46> :p x<br />
x - 10<br />
</pre><br />
<br />
Once a breakpoint is hit, you can explore the bindings in scope, as well as to evaluate any haskell expression, as you would do in a normal GHCi prompt. The <tt>':print'</tt> command can be very useful to explore the lazyness of your code.<br />
<br />
== Source-located errors ==<br />
<br />
[http://www.cse.unsw.edu.au/~dons/loch.html LocH] provides wrappers over<br />
<hask>assert</hask> for generating source-located exceptions and errors.<br />
<br />
Consider the use of a located <hask>fromJust</hask>:<br />
<br />
<haskell><br />
import Debug.Trace.Location<br />
import qualified Data.Map as M<br />
import Data.Maybe<br />
<br />
main = do print f<br />
<br />
f = let m = M.fromList<br />
[(1,"1")<br />
,(2,"2")<br />
,(3,"3")]<br />
s = M.lookup 4 m<br />
in fromJustSafe assert s<br />
<br />
fromJustSafe a s = check a (fromJust s)<br />
</haskell><br />
<br />
This will result in:<br />
<br />
<haskell><br />
$ ./a.out<br />
a.out: A.hs:12:20-25: Maybe.fromJust: Nothing<br />
</haskell><br />
<br />
This can be automated, using the 'loch' preprocessor, so a program<br />
failing with:<br />
<br />
<code><br />
$ ghc A.hs --make -no-recomp<br />
[1 of 1] Compiling Main ( A.hs, A.o )<br />
Linking A ...<br />
<br />
$ ./A<br />
A: Maybe.fromJust: Nothing<br />
</code><br />
<br />
Can be transformed to a src-located one by adding:<br />
<br />
<haskell><br />
import Debug.Trace.Location<br />
</haskell><br />
<br />
and then recompiling with the preprocessor on:<br />
<br />
<code><br />
$ ghc A.hs --make -pgmF loch -F -no-recomp<br />
[1 of 1] Compiling Main ( A.hs, A.o )<br />
Linking A ...<br />
<br />
$ ./A<br />
A: A.hs:14:14-19: Maybe.fromJust: Nothing<br />
</code><br />
<br />
== Other tricks ==<br />
<br />
* If you use GHC, you can get a stack trace in the console when your program fails with an error condition. See the [http://www.haskell.org/ghc/docs/latest/html/users_guide/using-ghc.html#rts-options-debugging description of relevant runtime options].<br />
* Some tips how to use GHCi debugger are also in [http://www.haskell.org/pipermail/glasgow-haskell-users/2009-February/016571.html this message].<br />
<br />
=== Locating a failure in a library function ===<br />
<br />
The simplest way to provide locating in the source code a mismatch<br />
run-time error in the library functions:<br />
<haskell><br />
head, tail, fromJust<br />
</haskell><br />
<br />
and others is to avoid these functions and to use explicit matching instead.<br />
<br />
For example, consider:<br />
<br />
<haskell><br />
g x = h $ fromJust $ f x,<br />
</haskell><br />
<br />
ghc-6.6 often looses the reference to <hask>g</hask>, <hask>f</hask>,<br />
and <hask>h</hask> in its run-time error report, when <hask>f</hask><br />
returns <hask>Nothing</hask>.<br />
<br />
But for the program:<br />
<br />
<haskell><br />
g x = let Just y = f x in h y,<br />
</haskell><br />
<br />
GHC reports:<br />
<br />
<haskell><br />
Main: M1.hs:9:11-22:<br />
Irrefutable pattern failed for pattern Data.Maybe.Just y<br />
</haskell><br />
<br />
Indicating the source of the failure.<br />
<br />
=== Mysterious parse errors ===<br />
<br />
GHC provides `-ferror-spans`, which will give you the exactly position<br />
of the start and end of an offending statement.<br />
<br />
[[Category:Tools]]<br />
<br />
=== Infinite loops ===<br />
On glasgow-haskell-users on 21 Nov 2007, pepe made the following suggestion for detecting the cause infinite loops in GHCi. Assuming the offending function is named `loop`, and takes one argument:<br />
<br />
# enable the flag -fbreak-on-error (`:set -fbreak-on-error` in GHCi)<br />
# run your expression with :trace (`:trace loop 'a'`)<br />
# hit Ctrl-C while your program is stuck in the loop to have the debugger break in the loop<br />
# use :history and :back to find out where the loop is located and why.<br />
<br />
''(For which versions? ghci >= 6.8?)''</div>Mikolajhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Games&diff=38274Applications and libraries/Games2011-01-17T21:44:07Z<p>Mikolaj: added a stub for LambdaHack</p>
<hr />
<div>{{LibrariesPage}}<br />
<br />
== Games ==<br />
<br />
;[http://hackage.haskell.org/package/babylon babylon]<br />
: An implementation of a simple 2-player board game. Uses wxHaskell.<br />
<br />
;Bridge<br />
:David Roundy originally developed a Bridge game in Haskell and wrote a versioning system for this project. However as time went by, the versioning project [[Darcs]] became the more important part of the development and the bridge game was stalled.<br />
<br />
; [http://www.maths.tcd.ie/~icecube/2008/11/endless-cavern/ Endless Cavern]: A 2D procedurally-generated cave exploration game.<br />
<br />
;[http://sourceforge.net/projects/fooengine/?abmode=1 Foo]<br />
:Foo (abbreviation from football) is a playing machine of [http://en.wikipedia.org/wiki/Paper_Soccer Paper Soccer], a pencil and paper game for two players. It contains a simple interface using HOpenGL library and provides many playing algorithms.<br />
<br />
;[[Frag]]<br />
:Frag is a 3D first person shooting game written in Haskell, by Mun Hon Cheong. It uses Yampa, Quake 3 BSP level format and OpenGL. It is licensed under the GPL.<br />
<br />
;[[GeBoP]]<br />
:The General Boardgames Player, offers a set of board games: Ataxx, Bamp, Halma, Hez, Kram, Nim, Reversi, TicTacToe, and Zenix. It uses wxHaskell.<br />
<br />
;[http://www.informatik.uni-bremen.de/~cxl/lehre/pi3.ws01/asteroids/ Haskell in Space]<br />
:An asteroid like game<br />
<br />
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/ Hetris]<br />
:ASCII tetris in Haskell<br />
<br />
;[http://hackage.haskell.org/package/hfiar hfiar]<br />
:Four in a Row in Haskell. Uses wxHaskell.<br />
<br />
;[http://www.cs.mu.oz.au/~bjpop/code/HInvaders.tar.gz hinvaders]<br />
:A simple ANSI-graphics space invaders written entirely in Haskell 98. See also [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Game hackage] and [http://joyful.com/darcsweb/darcsweb.cgi?r=hinvaders;a=summary darcs].<br />
<br />
;[http://www.cse.unsw.edu.au/~dons/code/contrib/hsChess hsChess]<br />
:Chess AI engine<br />
<br />
;[http://dotat.at/prog/life/hslife.hs HsLife]<br />
:A Haskell implementation of hashlife (not complete). It uses GLUT.<br />
<br />
;[http://mu.org/~mux/LambdaChess/ LambdaChess]<br />
:GTK chess client<br />
<br />
;[https://github.com/kosmikus/LambdaHack LambdaHack]<br />
:A small roguelike game with a flexible engine. GTK and terminal front-ends.<br />
<br />
;[http://www.ncc.up.pt/~pbv/stuff/lostcities/ Lost Cities]<br />
:A two-player card game where each player tries to mount profitable expeditions. It uses wxHaskell.<br />
<br />
;[http://hackage.haskell.org/package/mage Mage]<br />
:Nethack clone written in Haskell (The web site have [http://www.scannedinavian.com/~shae/mage-1.0pre35.tar.gz this mage-1.0.pre35.tar.gz file] containing an older version that was using Data.FiniteMap.) There seems to be a problem with newer curses library even with the more recent 1.1.0 version.<br />
<br />
;[http://hackage.haskell.org/package/MazesOfMonad MazesOfMonad]<br />
:Role-Playing Game (influenced by Nethack), complete and fully playable. Console mode only.<br />
<br />
;[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]<br />
:Monadius is a shoot 'em up with the selection bar power-up system for Windows, written in Haskell (now on [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071203 Hackage])<br />
<br />
;[http://d.hatena.ne.jp/authorNari/20080422/1208880928 Nario]<br />
:A Super Mario clone, using an SDL binding different from the one in Hackage: [http://fxp.hp.infoseek.co.jp/haskell/HSDL/arc/HSDL-0.2.0.zip]<br />
<br />
;[http://berlinbrowndev.blogspot.com/2007/09/octane-mech-opengl-haskell-based-mech.html Octane Mech]<br />
:Octane Mech, OpenGL Haskell based mech game<br />
<br />
;[http://haskell-tetris.pbwiki.com/Main OpenGL Tetris]<br />
:Tetris in Haskell with OpenGL<br />
<br />
;[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<br />
:Paratrooper is a simple action game that runs on Windows and is written in literate Haskell.<br />
<br />
;[http://raincat.bysusanlin.com/ Raincat]<br />
:2D puzzle game featuring a fuzzy little cat (uses GLUT)<br />
<br />
;[http://roguestar.downstairspeople.org Roguestar]<br />
:Roguestar is a science fiction adventure role playing game using Haskell and OpenGL.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing Shu-thing]<br />
:A 2-D vector graphics upwards-scrolling keyboard-controlled shooter. You shoot the enemies while dodging their bullets until you reach and defeat the enemy.<br />
<br />
;[http://web.jfet.org/~kwantam/TriHs.tar.gz TriHs] (tar.gz)<br />
:A 1- or 2-player Tetris game using Gtk2Hs and Cairo.<br />
<br />
;[[wxAsteroids]]<br />
:Your space ship enters an asteroid belt, try to avoid collisions! wxAsteroids is based on wxHaskell.<br />
<br />
;[http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html Xiangqiboard]<br />
:An implementation of xiangqi for Unix, using gtk2hs + cairo<br />
<br />
<br />
== Game Engines and Libraries ==<br />
<br />
;[http://www.cin.ufpe.br/~haskell/fungen FunGEn]<br />
:FunGEn (Functional Game Engine) is a 2D platform-independent BSD-licensed game engine implemented in and for Haskell in 2002, using HOpenGL. As of 2010, it's still the only pure haskell general-purpose game engine. A [http://hackage.haskell.org/package/FunGEn more recent version] is available on hackage, but this needs updating.<br />
<br />
;[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hipmunk Hipmunk]<br />
:Hipmunk: A Haskell binding for [http://wiki.slembcke.net/main/published/Chipmunk Chipmunk]. Chipmunk is a fast, simple, portable, 2D physics engine. It is completely self-contained. See also [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HipmunkPlayground HipmunkPlayground]: a simple OpenGL program that allows you to see some of Hipmunk's functions in action.<br />
<br />
;[[Hpysics]]<br />
:Hpysics is a physics engine written using Data Parallel Haskell during Google Summer of Code 2008.<br />
<br />
;[http://projects.haskell.org/game-tree/ game-tree]<br />
:game-tree is a purely functional library for searching game trees - useful for zero-sum two player games.<br />
<br />
;[http://hackage.haskell.org/package/IrrHaskell IrrHaskell]<br />
:Haskell binding to the [http://irrlicht.sourceforge.net/ Irrlicht game engine]. The Irrlicht Engine is an open source high performance realtime 3D engine<br />
<br />
== Further reading ==<br />
<br />
=== Blog articles ===<br />
* [http://prog21.dadgum.com/23.html Purely Functional Retrogames]<br />
<br />
* [http://prog21.dadgum.com/36.html Accidentally Introducing Side Effects into Purely Functional Code]<br />
<br />
=== Other ===<br />
* [http://www.londonhug.net/2007/09/24/better-video-for-games-in-haskell/ Games in Haskell, the video]<br />
:Matthew Sackman and Tristan Allwood on developing games with OpenGL in Haskell<br />
<br />
[[Category:Games|*]]<br />
[[Category:Applications]]<br />
[[Category:Libraries]]</div>Mikolaj