Skip to content

Commit 5ed30af

Browse files
committed
Added serialized/deserialized
1 parent f011f98 commit 5ed30af

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/Data/ArrayBuffer/Deserializer.purs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,18 @@ getFloat64Array d n = getTypedArray d (n * 8) TA.asFloat64Array
6565
deserializer :: forall e. AB.ArrayBuffer -> Eff (reader :: DV.Reader | e) Deserializer
6666
deserializer ab = return $ { dv : DV.whole ab, off : 0 }
6767

68+
69+
deserialized :: forall a e. (Deserializer -> Eff (reader :: DV.Reader | e) (Either String a)) -> AB.ArrayBuffer -> Either String a
70+
deserialized f b = runRPure (do
71+
d <- deserializer b
72+
res <- f d
73+
return res)
74+
75+
type WPure a = forall e. Eff (writer :: DV.Writer |e) a
76+
77+
foreign import runRPure
78+
"""
79+
function runRPure(f) {
80+
return f();
81+
}
82+
""" :: forall e a. Eff (|e) a -> a

src/Data/ArrayBuffer/Serializer.purs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,15 @@ serializer l = return $ { dv : DV.whole $ AB.create l, off : 0 }
3030
close :: Serializer -> forall e. Eff (writer :: DV.Writer | e) AB.ArrayBuffer
3131
close s = return $ AB.slice 0 s.off (DV.buffer s.dv)
3232

33-
serialized :: forall e. ByteLength -> (Serializer -> Eff (writer :: DV.Writer | e) Unit) -> Eff (writer :: DV.Writer | e) AB.ArrayBuffer
34-
serialized n f = do
33+
serialized :: forall e. ByteLength -> (Serializer -> Eff (writer :: DV.Writer | e) Unit) -> AB.ArrayBuffer
34+
serialized n f = runWPure (do
3535
s <- serializer n
3636
f s
37-
close s
37+
close s)
38+
39+
foreign import runWPure
40+
"""
41+
function runWPure(f) {
42+
return f();
43+
}
44+
""" :: forall a e. Eff (| e) a -> a

0 commit comments

Comments
 (0)