on master help sign in
Corrected some partial functions
4ea7eb9Michael
conduit/Data/Conduit.hs+14−14
@@ -74,6 +74,7 @@ instance MonadBaseControl IO m => Monoid (Source m a) where
74 [] -> do
74 [] -> do
75 liftBase $ I.writeIORef istate Nothing
75 liftBase $ I.writeIORef istate Nothing
76 return EOF
76 return EOF
77+ Chunks _ -> return stream
77
78
78type SinkInsideData a m b = Stream a -> ResourceT m (SinkResult a b)
79type SinkInsideData a m b = Stream a -> ResourceT m (SinkResult a b)
79data SinkInside a m b =
80data SinkInside a m b =
@@ -143,32 +144,31 @@ sinkJoin (Sink msinkI) = Sink $ do
143 sinkI <- msinkI
144 sinkI <- msinkI
144 case sinkI of
145 case sinkI of
145 SinkNoData (Sink inner) -> inner
146 SinkNoData (Sink inner) -> inner
146− SinkData _msink -> do
147+ SinkData msink -> do
147− undefined
148− {-
149 istate <- liftBase $ I.newIORef Nothing
148 istate <- liftBase $ I.newIORef Nothing
150− return $ go istate msink
149+ return $ SinkData $ go istate msink
151 where
150 where
152 go :: MonadBaseControl IO m
151 go :: MonadBaseControl IO m
153− => I.IORef (Maybe (SinkInside a m b))
152+ => I.IORef (Maybe (SinkInsideData a m b))
154 -> (Stream a -> ResourceT m (SinkResult a (Sink a m b)))
153 -> (Stream a -> ResourceT m (SinkResult a (Sink a m b)))
155− -> Stream a
154+ -> SinkInsideData a m b
156− -> ResourceT m (SinkResult a b)
157 go istate outer stream = do
155 go istate outer stream = do
158 state <- liftBase $ I.readIORef istate
156 state <- liftBase $ I.readIORef istate
159 case state of
157 case state of
160 Nothing -> do
158 Nothing -> do
161 SinkResult leftover minner' <- outer stream
159 SinkResult leftover minner' <- outer stream
162 case minner' of
160 case minner' of
163− Just (SinkData minner) -> do
161+ Just (Sink msink) -> do
164− inner <- minner
162+ sink <- msink
163+ case sink of
164+ SinkData inner -> do
165− liftBase $ I.writeIORef istate $ Just inner
165+ liftBase $ I.writeIORef istate $ Just inner
166− if null leftover
166+ if null leftover
167− then return $ SinkResult [] Nothing
167+ then return $ SinkResult [] Nothing
168− else go istate outer $ Chunks leftover
168+ else go istate outer $ Chunks leftover
169+ SinkNoData x -> return $ SinkResult leftover $ Just x
169 Nothing -> return $ SinkResult leftover Nothing
170 Nothing -> return $ SinkResult leftover Nothing
170 Just inner -> inner stream
171 Just inner -> inner stream
171− -}
172
172
173type Conduit a m b = Stream a -> ResourceT m (ConduitResult a b)
173type Conduit a m b = Stream a -> ResourceT m (ConduitResult a b)
174
174
conduit/Data/Conduit/List.hs−2
@@ -37,8 +37,6 @@ fromList l = Source $ do
37 unSource $ mkSource $ do
37 unSource $ mkSource $ do
38 l' <- liftBase $ I.atomicModifyIORef il $ \x -> ([], x)
38 l' <- liftBase $ I.atomicModifyIORef il $ \x -> ([], x)
39 return $ if null l' then EOF else Chunks l'
39 return $ if null l' then EOF else Chunks l'
40− where
41− unSource (Source s) = s
42
40
43take :: MonadBaseControl IO m
41take :: MonadBaseControl IO m
44 => Int
42 => Int