@@ -11,69 +11,75 @@ import qualified Data.ArrayBuffer.DataView as DV
1111
1212type Deserializer = Advancer
1313
14- chkErr :: forall a e . Maybe a -> Either String a
14+ type DE a = Eff (reader :: DV.Reader ) (Either String a )
15+ type Getter a = Deserializer -> DE a
16+ type ArrayGetter t = Deserializer -> Number -> DE t
17+
18+ chkErr :: forall a . Maybe a -> Either String a
1519chkErr x = case x of
1620 (Just v) -> Right v
1721 otherwise -> Left " Short read"
1822
19- getInt8 :: forall e . Deserializer -> Eff ( reader :: DV.Reader | e ) ( Either String Int8 )
23+ getInt8 :: Getter Int8
2024getInt8 d = chkErr <$> (advance 1 d >>= DV .getInt8 d.dv)
25+ getInt16 :: Getter Int16
2126getInt16 d = chkErr <$> (advance 2 d >>= DV .getInt16 d.dv)
27+ getInt32 :: Getter Int32
2228getInt32 d = chkErr <$> (advance 4 d >>= DV .getInt32 d.dv)
29+ getUint8 :: Getter Uint8
2330getUint8 d = chkErr <$> (advance 1 d >>= DV .getUint8 d.dv)
31+ getUint16 :: Getter Uint16
2432getUint16 d = chkErr <$> (advance 2 d >>= DV .getUint16 d.dv)
33+ getUint32 :: Getter Uint32
2534getUint32 d = chkErr <$> (advance 4 d >>= DV .getUint32 d.dv)
35+ getFloat32 :: Getter Float32
2636getFloat32 d = chkErr <$> (advance 4 d >>= DV .getFloat32 d.dv)
37+ getFloat64 :: Getter Float64
2738getFloat64 d = chkErr <$> (advance 8 d >>= DV .getFloat64 d.dv)
2839
29- getDataView :: forall e . Deserializer -> ByteLength -> Eff ( reader :: DV.Reader | e ) ( Either String DV. DataView)
40+ getDataView :: Deserializer -> ByteLength -> DE DV.DataView
3041getDataView d n = do
3142 o <- advance n d
3243 return $ case DV .slice o n (DV .buffer d.dv) of
3344 (Just dv) -> Right dv
3445 otherwise -> Left " short read"
3546
36- type AD t = forall e . Deserializer -> Number -> Eff (reader :: DV.Reader | e ) (Either String t )
37-
38-
39- getTypedArray :: forall e t . Deserializer -> Number -> (DV.DataView -> t ) -> Eff (reader :: DV.Reader | e ) (Either String t )
47+ getTypedArray :: forall t . Deserializer -> Number -> (DV.DataView -> t ) -> DE t
4048getTypedArray d sz conv = do
4149 edv <- getDataView d sz
4250 return $ case edv of
4351 Right dv -> Right $ conv dv
4452 Left err -> Left err
4553
46- getInt8Array :: AD TA.Int8Array
54+ getInt8Array :: ArrayGetter TA.Int8Array
4755getInt8Array d n = getTypedArray d n TA .asInt8Array
48- getInt16Array :: AD TA.Int16Array
56+ getInt16Array :: ArrayGetter TA.Int16Array
4957getInt16Array d n = getTypedArray d (n * 2 ) TA .asInt16Array
50- getInt32Array :: AD TA.Int32Array
58+ getInt32Array :: ArrayGetter TA.Int32Array
5159getInt32Array d n = getTypedArray d (n * 4 ) TA .asInt32Array
52- getUint8Array :: AD TA.Uint8Array
60+ getUint8Array :: ArrayGetter TA.Uint8Array
5361getUint8Array d n = getTypedArray d n TA .asUint8Array
54- getUint16Array :: AD TA.Uint16Array
62+ getUint16Array :: ArrayGetter TA.Uint16Array
5563getUint16Array d n = getTypedArray d (n * 2 ) TA .asUint16Array
56- getUint32Array :: AD TA.Uint32Array
64+ getUint32Array :: ArrayGetter TA.Uint32Array
5765getUint32Array d n = getTypedArray d (n * 4 ) TA .asUint32Array
58- getUint8ClampedArray :: AD TA.Uint8ClampedArray
66+ getUint8ClampedArray :: ArrayGetter TA.Uint8ClampedArray
5967getUint8ClampedArray d n = getTypedArray d n TA .asUint8ClampedArray
60- getFloat32Array :: AD TA.Float32Array
68+ getFloat32Array :: ArrayGetter TA.Float32Array
6169getFloat32Array d n = getTypedArray d (n * 4 ) TA .asFloat32Array
62- getFloat64Array :: AD TA.Float64Array
70+ getFloat64Array :: ArrayGetter TA.Float64Array
6371getFloat64Array d n = getTypedArray d (n * 8 ) TA .asFloat64Array
6472
65- deserializer :: forall e . AB.ArrayBuffer -> Eff (reader :: DV.Reader | e ) Deserializer
73+ deserializer :: AB.ArrayBuffer -> Eff (reader :: DV.Reader ) Deserializer
6674deserializer ab = return $ { dv : DV .whole ab, off : 0 }
6775
6876
69- deserialized :: forall a e . (Deserializer -> Eff (reader :: DV.Reader | e ) (Either String a )) -> AB.ArrayBuffer -> Either String a
77+ deserialized :: forall a . (Deserializer -> Eff (reader :: DV.Reader ) (Either String a )) -> AB.ArrayBuffer -> Either String a
7078deserialized f b = runRPure (do
7179 d <- deserializer b
7280 res <- f d
7381 return res)
7482
75- type WPure a = forall e . Eff (writer :: DV.Writer |e ) a
76-
7783foreign import runRPure
7884"""
7985function runRPure(f) {
0 commit comments