June 29, 2013 - Tagged as: en, haskell, shen.
Shen.hs now has a simple way to call Haskell functions. As an example, I removed some non-standard KLambda functions from Fun.hs
(standard primitive functions are defined there). Instead, they live in a separate module now, and I load them in run-time when I’m debugging.
Shen.hs is now exports it’s modules as a library. This is required to allow writing Shen.hs functions in Haskell.
KLambda.Types
module export all required type information to start writing Shen.hs functions in Haskell. All your functions should have the type KlFun1
. To make converting Haskell functions with higher arity(ie. KlFun2
, KlFun3
) to KlFun1
, all KlFun
instances now have a mkFun1 :: a -> KlFun1
method.
As an example, Debug.hs
module functions with types KlFun2
, KlFun3
etc. To call them from within Shen.hs, they are all wrapped with mkFun1
function.
After defining functions with type KlFun1
and compiling it, you should call dynload
primitive to load functions. Here’s an example session that demonstrates loading and using debugging functions:
$ Shen.hs --shen "/home/omer/Shen/hs_yeni/K Lambda"
loading file: /home/omer/Shen/hs_yeni/K Lambda/toplevel.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/core.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/sys.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/sequent.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/yacc.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/reader.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/prolog.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/track.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/load.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/writer.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/macros.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/declarations.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/t-star.kl ...loaded.
loading file: /home/omer/Shen/hs_yeni/K Lambda/types.kl ...loaded.
Shen 2010, copyright (C) 2010 Mark Tarver
released under the Shen license
www.shenlanguage.org, version 12
running under Haskell, implementation: GHC
port 0.1 ported by Ömer Sinan Ağacan
(0-) (cd "/home/omer/Shen/hs_yeni/dynload_test")
"/home/omer/Shen/hs_yeni/dynload_test/"
(1-) (dynload "Debug.o" "debug1F")
<function>
(2-) (debug1F "calling haskell function -- " 1 2)
calling haskell function -- 1 :: TyNum
2
(3-)
Note that you need both .hi
and .o
files to be able to load the library dynamically.
Before this additional feature I had fixed a bug and now Shen.hs fails in 8 tests in Test Suite distributed with Shen source. All errors are related and probably there is only one bug. Unfortunately narrowing bug’s scope is very hard at this point. Pull requests are welcome.
If you encounter any bugs please open an issue in Github repository.