mirror of
https://github.com/idris-lang/Idris2.git
synced 2024-12-01 01:09:03 +03:00
30 lines
630 B
Idris
30 lines
630 B
Idris
|
import System.FFI
|
||
|
|
||
|
libsmall : String -> String
|
||
|
libsmall fn = "C:" ++ fn ++ ",libsmall"
|
||
|
|
||
|
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
|