Skip to content

Commit f625558

Browse files
committed
Cleaning up
1 parent 1f6859b commit f625558

File tree

4 files changed

+46
-58
lines changed

4 files changed

+46
-58
lines changed

bower.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
{
22
"name": "purescript-arraybuffer",
33
"version": "0.1.0",
4-
"moduleType": [
5-
"node"
6-
],
74
"ignore": [
85
"**/.*",
96
"node_modules",

src/Data/ArrayBuffer/Deserializer.purs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,69 +11,75 @@ import qualified Data.ArrayBuffer.DataView as DV
1111

1212
type 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
1519
chkErr 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
2024
getInt8 d = chkErr <$> (advance 1 d >>= DV.getInt8 d.dv)
25+
getInt16 :: Getter Int16
2126
getInt16 d = chkErr <$> (advance 2 d >>= DV.getInt16 d.dv)
27+
getInt32 :: Getter Int32
2228
getInt32 d = chkErr <$> (advance 4 d >>= DV.getInt32 d.dv)
29+
getUint8 :: Getter Uint8
2330
getUint8 d = chkErr <$> (advance 1 d >>= DV.getUint8 d.dv)
31+
getUint16 :: Getter Uint16
2432
getUint16 d = chkErr <$> (advance 2 d >>= DV.getUint16 d.dv)
33+
getUint32 :: Getter Uint32
2534
getUint32 d = chkErr <$> (advance 4 d >>= DV.getUint32 d.dv)
35+
getFloat32 :: Getter Float32
2636
getFloat32 d = chkErr <$> (advance 4 d >>= DV.getFloat32 d.dv)
37+
getFloat64 :: Getter Float64
2738
getFloat64 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
3041
getDataView 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
4048
getTypedArray 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
4755
getInt8Array d n = getTypedArray d n TA.asInt8Array
48-
getInt16Array :: AD TA.Int16Array
56+
getInt16Array :: ArrayGetter TA.Int16Array
4957
getInt16Array d n = getTypedArray d (n * 2) TA.asInt16Array
50-
getInt32Array :: AD TA.Int32Array
58+
getInt32Array :: ArrayGetter TA.Int32Array
5159
getInt32Array d n = getTypedArray d (n * 4) TA.asInt32Array
52-
getUint8Array :: AD TA.Uint8Array
60+
getUint8Array :: ArrayGetter TA.Uint8Array
5361
getUint8Array d n = getTypedArray d n TA.asUint8Array
54-
getUint16Array :: AD TA.Uint16Array
62+
getUint16Array :: ArrayGetter TA.Uint16Array
5563
getUint16Array d n = getTypedArray d (n * 2) TA.asUint16Array
56-
getUint32Array :: AD TA.Uint32Array
64+
getUint32Array :: ArrayGetter TA.Uint32Array
5765
getUint32Array d n = getTypedArray d (n * 4) TA.asUint32Array
58-
getUint8ClampedArray :: AD TA.Uint8ClampedArray
66+
getUint8ClampedArray :: ArrayGetter TA.Uint8ClampedArray
5967
getUint8ClampedArray d n = getTypedArray d n TA.asUint8ClampedArray
60-
getFloat32Array :: AD TA.Float32Array
68+
getFloat32Array :: ArrayGetter TA.Float32Array
6169
getFloat32Array d n = getTypedArray d (n * 4) TA.asFloat32Array
62-
getFloat64Array :: AD TA.Float64Array
70+
getFloat64Array :: ArrayGetter TA.Float64Array
6371
getFloat64Array 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
6674
deserializer 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
7078
deserialized 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-
7783
foreign import runRPure
7884
"""
7985
function runRPure(f) {

src/Data/ArrayBuffer/Serializer.purs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,48 @@ import Control.Monad.Eff
1111
type Serializer = Advancer
1212

1313
type SE = Eff (writer :: DV.Writer) Serializer
14+
type Putter a = a -> Serializer -> SE
1415

1516
putter :: forall a. Number -> DV.Setter a -> a -> Serializer -> Eff (writer :: DV.Writer) Serializer
1617
putter n f v s = do
1718
o <- advance n s
1819
f s.dv v o
1920
return s
2021

21-
putInt8 :: Int8 -> Serializer -> SE
22+
putInt8 :: Putter Int8
2223
putInt8 = putter 1 DV.setInt8
23-
putInt16 :: Int16 -> Serializer -> SE
24+
putInt16 :: Putter Int16
2425
putInt16 = putter 2 DV.setInt16
25-
putInt32 :: Int32 -> Serializer -> SE
26+
putInt32 :: Putter Int32
2627
putInt32 = putter 4 DV.setInt32
27-
putUint8 :: Uint8 -> Serializer -> SE
28+
putUint8 :: Putter Uint8
2829
putUint8 = putter 1 DV.setUint8
29-
putUint16 :: Uint16 -> Serializer -> SE
30+
putUint16 :: Putter Uint16
3031
putUint16 = putter 2 DV.setUint16
31-
putUint32 :: Uint32 -> Serializer -> SE
32+
putUint32 :: Putter Uint32
3233
putUint32 = putter 4 DV.setUint32
33-
putFloat32 :: Float32 -> Serializer -> SE
34+
putFloat32 :: Putter Float32
3435
putFloat32 = putter 4 DV.setFloat32
35-
putFloat64 :: Float64 -> Serializer -> SE
36+
putFloat64 :: Putter Float64
3637
putFloat64 = putter 8 DV.setFloat64
3738

38-
mapDataView :: forall e. ByteLength -> Serializer -> Eff (writer :: DV.Writer | e) (Maybe DV.DataView)
39+
mapDataView :: ByteLength -> Serializer -> Eff (writer :: DV.Writer) (Maybe DV.DataView)
3940
mapDataView n s = do
4041
o <- advance n s
4142
return $ DV.slice o n (DV.buffer s.dv)
4243

43-
serializer :: forall e. ByteLength -> Eff (writer :: DV.Writer | e) Serializer
44+
serializer :: ByteLength -> Eff (writer :: DV.Writer) Serializer
4445
serializer l = return $ { dv : DV.whole $ AB.create l, off : 0 }
4546

46-
close :: Serializer -> forall e. Eff (writer :: DV.Writer | e) AB.ArrayBuffer
47+
close :: Serializer -> Eff (writer :: DV.Writer) AB.ArrayBuffer
4748
close s = return $ AB.slice 0 s.off (DV.buffer s.dv)
4849

49-
serialized :: forall e. ByteLength -> (Serializer -> Eff (writer :: DV.Writer | e) Serializer) -> AB.ArrayBuffer
50+
serialized :: ByteLength -> (Serializer -> Eff (writer :: DV.Writer) Serializer) -> AB.ArrayBuffer
5051
serialized n f = runWPure (serializer n >>= f >>= close)
5152

5253
foreign import runWPure
5354
"""
5455
function runWPure(f) {
5556
return f();
5657
}
57-
""" :: forall a e. Eff (| e) a -> a
58+
""" :: forall e a. Eff (|e) a -> a

test/Main.purs

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import Math
1818

1919
newtype Comp = Comp Number
2020

21-
putComp d (Comp v) = S.putInt8 d $ Int8 v
21+
putComp (Comp v) = S.putInt8 (Int8 v)
2222

2323

2424
getComp d = do
@@ -51,12 +51,8 @@ instance showV4 :: Show V4 where
5151
instance arbV4 :: Arbitrary V4 where
5252
arbitrary = V4 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
5353

54-
putV4 d (V4 x y z t) = do
55-
let i8 = putComp d
56-
i8 x
57-
i8 y
58-
i8 z
59-
i8 t
54+
55+
putV4 (V4 x y z t) d = pure d >>= putComp x >>= putComp y >>= putComp z >>= putComp t
6056

6157
getV4 d = do
6258
let comp = getComp d
@@ -79,12 +75,7 @@ instance arbM4 :: Arbitrary M4 where
7975
arbitrary = M4 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
8076

8177

82-
putM4 d (M4 x y z t) = do
83-
let v4 = putV4 d
84-
v4 x
85-
v4 y
86-
v4 z
87-
v4 t
78+
putM4 (M4 x y z t) d = pure d >>= putV4 x >>= putV4 y >>= putV4 z >>= putV4 t
8879

8980
getM4 d = do
9081
let v4= getV4 d
@@ -139,12 +130,7 @@ main = do
139130

140131
serdes :: M4 -> M4 -> M4 -> M4 -> Boolean
141132
serdes m0 m1 m2 m3 = forcePure $ do
142-
a <- S.serialized 256 $ \s -> do
143-
let p = putM4 s
144-
p m0
145-
p m1
146-
p m2
147-
p m3
133+
let a = S.serialized 256 \s -> pure s >>= putM4 m0 >>= putM4 m1 >>= putM4 m2 >>= putM4 m3
148134
d <- D.deserializer a
149135
let g = getM4 d
150136
m0' <- g
@@ -155,9 +141,7 @@ serdes m0 m1 m2 m3 = forcePure $ do
155141

156142
short :: M4 -> M4 -> Boolean
157143
short m0 m1 = forcePure $ do
158-
a <- S.serialized 256 $ \s -> do
159-
let p = putM4 s
160-
p m0
144+
let a = S.serialized 256 \s -> putM4 m0 s
161145
d <- D.deserializer a
162146
let g = getM4 d
163147
m0' <- g

0 commit comments

Comments
 (0)