Need help with finkel?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

146 Stars 1 Forks BSD 3-Clause "New" or "Revised" License 1.1K Commits 2 Opened issues


Haskell in S-expression

Services available


Need anything else?

Contributors list


Build status Documentation Codecov

Finkel is a statically typed, purely functional, non-strict-by-default dialect of the Lisp programming language.

Or in other words, Haskell in S-expression.


  • Integration with existing Haskell modules.
  • Building Haskell-compatible Cabal packages.
  • Documentation generation with Haddock.
  • Lisp style macro system.
  • Tool executable, including interactive REPL.


Sample code

;;;; File: fib.fnk

(:doc "Simple example module to show fibonacci number.

The compiled executable takes an integer argument from command line input and print the fibonacci number of the argument.")

(defmodule Main (import (System.Environment (getArgs))))

(defn (:: main (IO ())) "The main entry point function." (>>= getArgs (. print fib read head)))

(defn (:: fib (-> Int Int)) "Naive fibonacci function." [0] 0 [1] 1 [n] (+ (fib (- n 1)) (fib (- n 2))))

Compiling an executable

$ finkel make -o fib fib.fnk
[1 of 1] Compiling Main             ( fib.fnk, fib.o )
Linking fib
$ ./fib 10

Running REPL

$ finkel repl
Hit `Ctrl-d' or type ,q to quit, type ,? for help.
> ,load fib.fnk
[1 of 1] Compiling Main             ( fib.fnk, interpreted )
; loaded fib.fnk
> ,info fib
fib :: Int -> Int       -- Defined at fib.fnk:16:11
> (map fib [1 .. 10])
> (System.Environment.withArgs ["10"] main)
> ,q

Further resources

See the documentation for more details.


Contributions are welcome. Please see the

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.