@@ -33,7 +33,7 @@ module Node.Stream
3333import  Prelude 
3434
3535import  Control.Bind  ((<=<))
36- import  Data.Maybe  (Maybe (..), maybe )
36+ import  Data.Maybe  (Maybe (..), maybe ,  fromMaybe )
3737import  Data.Either  (Either (..))
3838import  Node.Encoding 
3939import  Node.Buffer  (Buffer ())
@@ -66,6 +66,8 @@ type Writable r = Stream (write :: Write | r)
6666--  | A duplex (readable _and_ writable stream)
6767type  Duplex  =  Stream  (read  ::  Read , write  ::  Write )
6868
69+ foreign  import  undefined  ::  forall  a . a 
70+ 
6971foreign  import  data  Chunk  :: *
7072readChunk  ::  Chunk  ->  Either  String  Buffer 
7173readChunk = readChunkImpl Left  Right 
@@ -84,26 +86,26 @@ onData r cb =
8486      Right  buf -> 
8587        pure buf
8688
87- read  ::  forall  w  eff . Readable  w  (err  ::  EXCEPTION  | eff ) ->  Eff  (err  ::  EXCEPTION  | eff ) (Maybe  Buffer )
88- read r = do 
89-   v <-  readEither r
89+ read  ::  forall  w  eff . Readable  w  (err  ::  EXCEPTION  | eff ) ->  Maybe   Int   ->   Eff  (err  ::  EXCEPTION  | eff ) (Maybe  Buffer )
90+ read r size  = do 
91+   v <-  readEither r size 
9092  case  v of 
9193       Nothing         ->  pure Nothing 
9294       Just  (Left  _)  ->  throw " Stream encoding should not be set" 
9395       Just  (Right  b) ->  pure (Just  b)
9496
95- readString  ::  forall  w  eff . Readable  w  (err  ::  EXCEPTION  | eff ) ->  Encoding  ->  Eff  (err  ::  EXCEPTION  | eff ) (Maybe  String )
96- readString r enc = do 
97-   v <-  readEither r
97+ readString  ::  forall  w  eff . Readable  w  (err  ::  EXCEPTION  | eff ) ->  Maybe   Int   ->   Encoding  ->  Eff  (err  ::  EXCEPTION  | eff ) (Maybe  String )
98+ readString r size  enc = do 
99+   v <-  readEither r size 
98100  case  v of 
99101       Nothing           ->  pure Nothing 
100102       Just  (Left  _)    ->  throw " Stream encoding should not be set" 
101103       Just  (Right  buf) ->  Just  <$> (unsafeInterleaveEff $ Buffer .toString enc buf)
102104
103- readEither  ::  forall  w  eff . Readable  w  eff  ->  Eff  eff  (Maybe  (Either  String  Buffer ))
104- readEither = readImpl readChunk Nothing  Just 
105+ readEither  ::  forall  w  eff . Readable  w  eff  ->  Maybe   Int   ->   Eff  eff  (Maybe  (Either  String  Buffer ))
106+ readEither r size  = readImpl readChunk Nothing  Just  r (fromMaybe undefined size) 
105107
106- foreign  import  readImpl  ::  forall  r  eff . (Chunk  ->  Either  String  Buffer ) ->  (forall  a . Maybe  a ) ->  (forall  a . a  ->  Maybe  a ) ->  Readable  r  eff  ->  Eff  eff  (Maybe  (Either  String  Buffer ))
108+ foreign  import  readImpl  ::  forall  r  eff . (Chunk  ->  Either  String  Buffer ) ->  (forall  a . Maybe  a ) ->  (forall  a . a  ->  Maybe  a ) ->  Readable  r  eff  ->  Int   ->   Eff  eff  (Maybe  (Either  String  Buffer ))
107109
108110--  | Listen for `data` events, returning data in a String, which will be
109111--  | decoded using the given encoding. Note that this will fail if `setEncoding`
0 commit comments