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
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.
- 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
- 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
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.
- 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
- In any case, please let me know
about your experience.
Bugs / To do
- Greg Schechter, Ricky Yeung, Salim AbiEzzi, and I collaborated at Sun Microsystems on
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.
- 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
- Philip Wadler had provided interesting
and insightful feedback on the semantics of behaviors and events.
- Jake Elliott did the artwork for Sokoban.
||If Fran appeals to you, check out Pan,
a high-level library and optimizing compiler for synthesis of
March 11, 2004. Visitor Count:
since November 20, 1998