summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2019-03-30 16:23:07 +0100
committerMiguel <m.i@gmx.at>2019-03-30 16:23:07 +0100
commit0b63a8e4950e4628c36f812210cfdf40a28be034 (patch)
tree1b1b7914f56752379310781ea01dc9c1192e946f
parentb45e37124d855bdf3365e8202559c45cf28e9d88 (diff)
added simple ffi example calling c from hask
-rw-r--r--ffi/Bar.c3
-rw-r--r--ffi/Makefile4
-rw-r--r--ffi/barmain.hs6
3 files changed, 12 insertions, 1 deletions
diff --git a/ffi/Bar.c b/ffi/Bar.c
new file mode 100644
index 0000000..3bf5008
--- /dev/null
+++ b/ffi/Bar.c
@@ -0,0 +1,3 @@
+double bar(double v){
+ return v+v*v;
+}
diff --git a/ffi/Makefile b/ffi/Makefile
index 6f098a6..849a8de 100644
--- a/ffi/Makefile
+++ b/ffi/Makefile
@@ -1,9 +1,11 @@
hask_from_c: Foo.hs foomain.c
stack ghc -- Foo.hs
stack ghc -- -no-hs-main Foo.o foomain.c -o hask_from_c
-
+c_from_hask: Bar.c barmain.hs
+ stack ghc -- barmain.hs Bar.c -o c_from_hask
clean:
- rm *.o
- rm *.hi
- rm Foo_stub.h
- rm hask_from_c
+ - rm c_from_hask
diff --git a/ffi/barmain.hs b/ffi/barmain.hs
new file mode 100644
index 0000000..07e81ae
--- /dev/null
+++ b/ffi/barmain.hs
@@ -0,0 +1,6 @@
+foreign import ccall "exp" c_exp :: Double -> Double
+foreign import ccall "bar" c_bar :: Double -> Double
+
+main = do
+ print $ c_exp 2
+ print $ c_bar 2