@@ -27,8 +27,11 @@ Parse values out of a `dataview :: Data.ArrayBuffer.Types.DataView`. All
27
27
Parse two big-endian IEEE 754 double-precision floats.
28
28
29
29
``` purescript
30
+ import Text.Parsing.Parser (runParserT)
31
+ import Text.Parsing.Parser.DataView (anyFloat64be)
32
+
30
33
do
31
- result <- Text.Parsing.Parser. runParserT dataview $ do
34
+ result <- runParserT dataview $ do
32
35
float1 <- anyFloat64be
33
36
float2 <- anyFloat64be
34
37
pure $ Tuple float1 float2
39
42
Parse an array of ` n ` 32-bit signed integers.
40
43
41
44
``` purescript
45
+ import Text.Parsing.Parser (runParserT)
46
+ import Text.Parsing.Parser.DataView (anyUint32be)
47
+ import Data.Unfoldable (replicateA)
48
+
42
49
do
43
- result <- Text.Parsing.Parser. runParserT dataview $ replicateA n anyInt32be
50
+ result <- runParserT dataview $ replicateA n anyInt32be
44
51
```
45
52
46
53
### Parse UTF8
@@ -52,33 +59,37 @@ it depends on
52
59
[ ` Data.TextDecoding.decodeUtf8 ` ] ( https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextDecoding#v:decodeUtf8 ) .
53
60
54
61
``` purescript
55
- import Effect (Effect, liftEffect)
56
62
import Control.Monad.Trans.Class (lift)
63
+ import Data.ArrayBuffer.Types (DataView, Uint8Array)
64
+ import Data.ArrayBuffer.DataView (buffer, byteOffset, byteLength)
65
+ import Data.ArrayBuffer.Typed (part)
66
+ import Effect (Effect, liftEffect)
67
+ import Text.Parsing.Parser (runParserT, fail)
68
+ import Text.Parsing.Parser.DataView (anyUint32be, takeN)
69
+ import Data.UInt (toInt)
70
+ import Data.Text.Decoding (decodeUtf8)
71
+
57
72
58
- mkTypedArray :: Data.ArrayBuffer.Types.DataView -> Effect Data.ArrayBuffer.Types.Uint8Array
59
- mkTypedArray dv = do
60
- let buffer = Data.ArrayBuffer.DataView.buffer dv
61
- byteOffset = Data.ArrayBuffer.DataView.byteOffset dv
62
- byteLength = Data.ArrayBuffer.DataView.byteLength dv
63
- Data.ArrayBuffer.Typed.part buffer byteOffset byteLength
73
+ mkUint8Array :: DataView -> Effect Uint8Array
74
+ mkUint8Array dv = part (buffer dv) (byteOffset dv) (byteLength dv)
64
75
65
76
do
66
- result <- Text.Parsing.Parser. runParserT dataview $ do
77
+ result <- runParserT dataview $ do
67
78
-- Parse a 32-bit big-endian length prefix for the length of the utf8 string,
68
79
-- in bytes.
69
80
length <- anyUint32be
70
- stringview <- takeN $ UInt. toInt length
71
- stringarray <- lift $ liftEffect $ mkTypedArray stringview
72
- case Data.TextDecoding. decodeUtf8 stringarray of
73
- Left err -> Data.Parsing.Parser. fail $ show err
81
+ stringview <- takeN $ toInt length
82
+ stringarray <- lift $ liftEffect $ mkUint8Array stringview
83
+ case decodeUtf8 stringarray of
84
+ Left err -> fail $ show err
74
85
Right s -> pure s
75
86
```
76
87
77
88
## Serialization
78
89
79
90
This package is for reading (` DataView ` s on) ` ArrayBuffer ` s, not writing
80
91
them. See the package
81
- [ __ purescript-arraybuffer -builder__ ] ( https://pursuit.purescript.org/packages/purescript-arraybuffer-builder/ )
92
+ [ __ arraybuffer -builder__ ] ( https://pursuit.purescript.org/packages/purescript-arraybuffer-builder/ )
82
93
for a way to
83
94
serialize and build ` ArrayBuffer ` s.
84
95
@@ -88,8 +99,3 @@ serialize and build `ArrayBuffer`s.
88
99
* [ MDN ` ArrayBuffer ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer )
89
100
* [ MDN ` DataView ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView )
90
101
91
- ## Notes
92
-
93
- Perhaps some day this package can be
94
- [ merged into __ purescript-parsing__ ] ( https://github.com/purescript-contrib/purescript-parsing/issues/88 ) ,
95
- but for now it has too many non-* purescript-contrib* dependencies.
0 commit comments