@@ -96,6 +96,13 @@ unsafePerformIO : IO' ffi a -> a
9696unsafePerformIO (MkIO f) = unsafePerformPrimIO
9797 (prim_io_bind (f (TheWorld prim__TheWorld)) (\ b => prim_io_return b))
9898
99+prim_fread : Ptr -> IO' l String
100+prim_fread h = MkIO (\w => prim_io_return (prim__readString (world w) h))
101+
102+prim_fwrite : Ptr -> String -> IO' l Int
103+prim_fwrite h s
104+ = MkIO (\w => prim_io_return (prim__writeString (world w) h s))
105+
99106--------- The C FFI
100107
101108data Raw a = MkRaw a -- code generated can assume it's compiled just as 'a'
@@ -141,13 +148,35 @@ fork (MkIO f) = MkIO (\w => prim_io_bind
141148 (\ x => prim_io_return x)))
142149 (\x => prim_io_return x))
143150
144−prim_fread : Ptr -> IO String
145−prim_fread h = MkIO (\w => prim_io_return (prim__readString (world w) h))
146−
147−prim_fwrite : Ptr -> String -> IO Int
148−prim_fwrite h s
149− = MkIO (\w => prim_io_return (prim__writeString (world w) h s))
150−
151151forceGC : IO ()
152152forceGC = foreign FFI_C "idris_forceGC" (Ptr -> IO ()) prim__vm
153153
154+--------- The Javascript/Node FFI
155+
156+
157+-- Supported JS foreign types
158+mutual
159+ data JsFn t = MkJsFn t
160+
161+ data JS_IntTypes : Type -> Type where
162+ JS_IntChar : JS_IntTypes Char
163+ JS_IntNative : JS_IntTypes Int
164+
165+ data JS_FnTypes : Type -> Type where
166+ JS_Fn : JS_Types s -> JS_FnTypes t -> JS_FnTypes (s -> t)
167+ JS_FnIO : JS_Types t -> JS_FnTypes (IO' l t)
168+ JS_FnBase : JS_Types t -> JS_FnTypes t
169+
170+ data JS_Types : Type -> Type where
171+ JS_Str : JS_Types String
172+ JS_Float : JS_Types Float
173+ JS_Unit : JS_Types ()
174+ JS_FnT : JS_FnTypes a -> JS_Types (JsFn a)
175+ JS_IntT : JS_IntTypes i -> JS_Types i
176+
177+FFI_JS : FFI
178+FFI_JS = MkFFI JS_Types String
179+
180+JS_IO : Type -> Type
181+JS_IO = IO' FFI_JS
182+