### Haskell.
HC = ghc
-HFLAGS = -O2 -XFlexibleInstances
+HFLAGS = -O2
CLEANFILES += *.hi *.hc
.SUFFIXES: .hs
.hs.o:; $(HC) -c $(HFLAGS) -o $@ $<
###--------------------------------------------------------------------------
### Common Lisp.
-CLEANFILES += *.core
+CLEANFILES += *.core *.fasl
+
+.SUFFIXES: .lisp .fasl
+.lisp.fasl:; sbcl --eval '(quit :unix-status (if (compile-file "$<") 0 1))'
LANGS += cl
SOURCES += cl-fringe.lisp
-cl-fringe: cl-fringe.lisp
-## cl-launch -R -o $@ -f `pwd`/$^ -- slow to start
- cl-launch -o $@ -f `pwd`/$^ +I -r launch -d $@.core
+cl-fringe: cl-fringe.fasl
+ cp $< $@.new && chmod +x $@.new && mv $@.new $@
+## cl-launch -o $@ -f `pwd`/$^ +I -r launch -d $@.core
###--------------------------------------------------------------------------
### F#.
SCMC = csc
SCMFLAGS = -c -O2
-.SUFFIXES: .scm .o
+.SUFFIXES: .scm
.scm.o:; $(SCMC) $(SCMFLAGS) -o $@ $<
LANGS += scheme
$(SCMC) -o $@ $^
###--------------------------------------------------------------------------
+### Go.
+
+GOOBJ = 8
+GOC = $(GOOBJ)g
+GOLINK = $(GOOBJ)l
+CLEANFILES += *.$(GOOBJ)
+.SUFFIXES: .$(GOOBJ) .go
+.go.$(GOOBJ):; $(GOC) $(GOFLAGS) $<
+
+LANGS += go
+SOURCES += go-fringe.go
+go-fringe: go-fringe.$(GOOBJ)
+ $(GOLINK) -o $@ $^
+
+###--------------------------------------------------------------------------
### Smalltalk.
LANGS += smalltalk