Fran version 1.16

(Functional Reactive Animation)

The Fran implementation has gone quite stale and is unlikely to work any longer. For a successor, see Reactive and FieldTrip. I'm still interested in purely functional interactive graphics, and I believe there's still lots of room for innovative work/play in the area. If you're interested in collaborative research & implementation on this topic, please contact me.

Fran is a Haskell library (or "embedded language") for interactive animations with 2D and 3D graphics and sound. It runs under Windows 95/98 and Windows NT under Hugs 98.

Here is a tutorial article on Composing Reactive Animations. (The animated GIFs total 2Mb. Please be patient. You might want to download the zip file and view it locally.) See here for a few other related publications.

See news for details on changes from one version to another, and links to zip files for all released versions.

See here for some publications on Fran. Also, check out Pan, an image synthesis and manipulation language. Roughly speaking, it does for 2D space what Fran does for time.

Notes

Download Hugs98 from the download page linked to here.

Download and unpack the latest version so that you have a Fran subdirectory in c:\Hugs98\lib . (Or elsewhere, depending on where you installed Hugs.) Use :set -P;c:\Hugs98\lib\Fran" to ensure that the library is included on your search path. You will also need to copy the file SpriteLib.dll from c:\Hugs98\lib\Fran into c:\Hugs98 so that it is in the same directory as the Hugs executables.

subdirectory in . (Or elsewhere, depending on where you installed Hugs.) Use to ensure that the library is included on your search path. You will also need to copy the file from into so that it is in the same directory as the Hugs executables. Fran works with Windows only. You'll need DirectX version 3 or better. I recommend that you get the latest version if you have Windows 95, 98 or 2000. DirectX 3 works with NT 4.0 if you have Service pack 3 installed. A Un*x version would be great, but I don't have the resources to do it.

Check out the tutorial and User's Manual. (The tutorial has lots of animated GIFs totalling 2Mb. Please be patient. You might want to download the zip file and view it locally.)

The demos directory has -- guess what? -- demos! See demos.htm.

directory has -- guess what? -- demos! See demos.htm. The garbage collector interferes with smooth performance. After Hugs and GHC are merged, this problem should not be noticeable.

Try examples of your own. If you send me ones you've built, I'll consider them for inclusion (with credit to you) in future releases.

As of January 2002, I notice that the performance is much worse than I remember, and the visual quality of 3D is terrible. I'm guessing it's due to changes to Direct3D, but I really don't know.

If you're installing Fran from a zip file, rename your Hugs/lib/Fran (if you have one) to "FranWas" (for instance), and unzip into Hugs/lib. Then rename Hugs/SpriteLib.dll (if it exists) to SpriteLibWas.dll, and manually copy the new Hugs/lib/Fran/SpriteLib.dll into Hugs/ (important). Then try it out. If you get an error message like 'ERROR: ".../HSpriteLib.hs": Error while importing DLL "HSpriteLib.dll" ', you're probably getting an old SpriteLib.dll or none at all.

Due to bit rot, running the tutorial via "main" in demos/Tutorial.hs often dies with "Program error: IOExts.interleaveIO: thread exited with no result". You can, however run the examples individually as explained in the header comment.

In any case, please let me know about your experience.

Bugs / To do

Credits

Greg Schechter, Ricky Yeung, Salim AbiEzzi, and I collaborated at Sun Microsystems on TBAG, a system for constraint-based, semi-declarative modeling of 3D animation. Some of the Fran ideas were initially explored there.

Todd Knoblock and Jim Kajiya helped to explore the basic ideas of behaviors and events.

Sigbjorn Finne helped a lot with the implementation during his summer '96 internship. Since then, he has been very helpful with getting getting Fran and GHC working well together.

helpful with getting getting Fran and GHC working well together. Tony Daniels has been pushing the limits of physics-oriented reactive behavior, uncovering some limitations in the implementation. He also collaborated on some ideas for efficient behavior representation.

Paul Hudak has been collaborating on the ideas and, in particular, how to embed them in Haskell.

Alastair Reid answered lots of my naive questions about Haskell and its implementation, and provided some emergency Hugs hacking. He also made very helpful pass through version 0.8, updating it to a newer Hugs version, and making various improvements, and rewriting interaction code to be much simpler.

John Peterson wrote another implementation that provided an interesting comparison. Many interesting discussions. With Gary Shu Ling and me, wrote the Fran User's guide.

Gary Shu Ling found misc bugs and sources of incompleteness. He also helped out quite a lot with the Fran 1.05 during a Fall '97 internship, and developed the Sokoban demo.

Simon Peyton Jones is helping me understand GHC (the Glasgow Haskell compiler) and how to use it effectively to compiler animation programs, as well as how to better implement Fran.

Mark Jones helped me understand Haskell type classes and how to use them well in Fran. He also adapted Fran for Haskell 98

Philip Wadler had provided interesting and insightful feedback on the semantics of behaviors and events.

Jake Elliott did the artwork for Sokoban.

More fun

If Fran appeals to you, check out Pan, a high-level library and optimizing compiler for synthesis of interactive images.