11 | data Struct : String ->
12 | List (String, Type) ->
18 | data FieldType : String -> Type -> List (String, Type) -> Type where
19 | First : FieldType n t ((n, t) :: ts)
20 | Later : FieldType n t ts -> FieldType n t (f :: ts)
23 | prim__getField : {s : _} -> forall fs, ty .
24 | Struct s fs -> (n : String) ->
25 | FieldType n ty fs -> ty
27 | prim__setField : {s : _} -> forall fs, ty .
28 | Struct s fs -> (n : String) ->
29 | FieldType n ty fs -> ty -> PrimIO ()
35 | public export %inline
36 | getField : {sn : _} -> (s : Struct sn fs) -> (n : String) ->
37 | {auto fieldok : FieldType n ty fs} -> ty
38 | getField s n = prim__getField s n fieldok
45 | public export %inline
46 | setField : {sn : _} -> (s : Struct sn fs) -> (n : String) ->
47 | {auto fieldok : FieldType n ty fs} -> (val : ty) -> IO ()
48 | setField s n val = primIO (prim__setField s n fieldok val)
50 | %foreign "C:idris2_malloc, libidris2_support, idris_memory.h"
51 | prim__malloc : (size : Int) -> PrimIO AnyPtr
53 | %foreign "C:idris2_free, libidris2_support, idris_memory.h"
54 | "javascript:lambda:()=>undefined"
55 | prim__free : AnyPtr -> PrimIO ()
61 | malloc : HasIO io => (size : Int) -> io AnyPtr
62 | malloc size = primIO $
prim__malloc size
66 | free : HasIO io => AnyPtr -> io ()
67 | free ptr = primIO $
prim__free ptr