:- module scheme.

:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.

:- implementation.

:- import_module string, int, list, store, map.
 
:- type lisp_val ---> lisp_atom(string) 
                    ; some [S] (
                      lisp_function(
                          params  :: list(string),
                          closure :: generic_mutvar(int, S)
                      ) => store(S))
                    .

:- inst lisp_val ---> lisp_atom(ground) 
                    ; lisp_function(ground, ground)
                    .


:- pred on_lisp_val(lisp_val::in(lisp_val)) is det.
on_lisp_val(lisp_atom(_)).
on_lisp_val(lisp_function(_, _)).

main(!IO) :-
    print("Testing\n", !IO).
