Idris2/samples/ffi/Struct.idr
Adam Harries 3f4fd8e4aa
Document samples/ffi, and change name of .so to better suit convention. (#474)
Co-authored-by: G. Allais <guillaume.allais@ens-lyon.org>
2020-07-24 13:21:48 +01:00

30 lines
631 B
Idris

import System.FFI
libsmall : String -> String
libsmall fn = "C:" ++ fn ++ ",libsmallc"
Point : Type
Point = Struct "point" [("x", Int), ("y", Int)]
%foreign (libsmall "mkPoint")
mkPoint : Int -> Int -> Point
%foreign (libsmall "freePoint")
prim_freePoint : Point -> PrimIO ()
freePoint : Point -> IO ()
freePoint p = primIO $ prim_freePoint p
showPoint : Point -> String
showPoint pt
= let x : Int = getField pt "x"
y : Int = getField pt "y" in
show (x, y)
main : IO ()
main
= do let pt = mkPoint 20 30
setField pt "x" (the Int 40)
putStrLn $ showPoint pt
freePoint pt