Using The Finkel Executable

The finkel executable from the finkel package contains sub-commands to work with Finkel source codes.

Compiling with Finkel Make

To compile a Finkel source code file, one can use the make sub-command. Open a file named hello.fnk with your favorite editor and save the file with the following contents:

;;;; File: hello.fnk

(defn main
  (putStrLn "Hello, World!"))

Then invoke finkel make to compile the file. The command shown in the following line will compile the file as an executable named hello:

$ finkel make -o hello hello.fnk
[1 of 1] Compiling Main             ( hello.fnk, hello.o )
Linking hello ...
$ ./hello
Hello, World!

The make sub-command understands most of the options for the ghc executable --make mode:

$ finkel make -o hello -fforce-recomp -prof -fprof-auto hello.fnk
[1 of 1] Compiling Main             ( hello.fnk, hello.o )
Linking hello ...

The compiled executable understands RTS options:

$ ./hello +RTS -s -p
Hello, World!
          56,992 bytes allocated in the heap
           4,864 bytes copied during GC
          46,040 bytes maximum residency (1 sample(s))
          23,592 bytes maximum slop
               0 MB total memory in use (0 MB lost due to fragmentation)

                                     Tot time (elapsed)  Avg pause  Max pause
  Gen  0         0 colls,     0 par    0.000s   0.000s     0.0000s    0.0000s
  Gen  1         1 colls,     0 par    0.000s   0.000s     0.0001s    0.0001s

  INIT    time    0.000s  (  0.000s elapsed)
  MUT     time    0.000s  (  0.000s elapsed)
  GC      time    0.000s  (  0.000s elapsed)
  RP      time    0.000s  (  0.000s elapsed)
  PROF    time    0.000s  (  0.000s elapsed)
  EXIT    time    0.000s  (  0.000s elapsed)
  Total   time    0.000s  (  0.001s elapsed)

  %GC     time       0.0%  (0.0% elapsed)

  Alloc rate    0 bytes per MUT second

  Productivity 100.0% of total user, 22.7% of total elapsed

Running REPL

From shell

The finkel executable has repl sub-command to run an interactive read-eval-print-loop (a.k.a. REPL). To start a REPL from a shell, invoke finkel repl:

$ finkel repl
Hit `Ctrl-d' or type ,q to quit, type ,? for help.
> (+ 41 1)
42
> ,type foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
> ,info Rational
type Rational = GHC.Real.Ratio Integer  -- Defined in ‘GHC.Real’
> ,load hello.fnk
[1 of 1] Compiling Main             ( hello.fnk, interpreted )
; loaded hello.fnk
> main
Hello, World!
> ,q

From Emacs

There is a major mode named finkel-mode for the Emacs editor, with functionality to run an interactive REPL session from Emacs. See the README file in the finkel-mode repository for more details.

Getting More Help

The finkel executable contains a help sub-command to show brief usages of available commands:

$ finkel help make
USAGE: finkel make [command-line-options-and-files]

HELP OPTIONS:

    --fnk-help       Show this help and exit.
    --fnk-languages  Show supported language extensions and exit.
    --fnk-version    Show Finkel version and exit.

DEBUG OPTIONS:

    --fnk-verbose=INT   Set verbosity level to INT.
    --fnk-hsdir=DIR     Set Haskell code output directory to DIR.
    --fnk-dump-dflags   Dump DynFlags settings.
    --fnk-dump-expand   Dump expanded code.
    --fnk-dump-hs       Dump Haskell source code.
    --fnk-trace-expand  Trace macro expansion.
    --fnk-trace-make    Trace make function.
    --fnk-trace-spf     Trace builtin special forms.

  Other options are passed to ghc.