yaftee-conduit 0.1.0.0 → 0.1.0.1
raw patch · 2 files changed
+69/−3 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Control.Monad.Yaftee.Pipe.Tools: data Devide m
+ Control.Monad.Yaftee.Pipe.Tools: devide :: forall m (es :: [(Type -> Type -> Type -> Type) -> Type -> Type -> Type -> Type]). forall (nm :: Symbol) -> (Eq m, Monoid m, Member P es, Member (Named nm (Devide m)) es) => (Int -> m -> Maybe (m, m)) -> m -> Int -> E es m m ()
+ Control.Monad.Yaftee.Pipe.Tools: devideNs :: forall m (es :: [(Type -> Type -> Type -> Type) -> Type -> Type -> Type -> Type]). forall (nm :: Symbol) -> (Semigroup m, Member P es, Member (Named nm (Devide m)) es) => (Int -> m -> Maybe (m, m)) -> m -> [Int] -> E es m m ()
+ Control.Monad.Yaftee.Pipe.Tools: devideRun :: forall (nm :: Symbol) m (es :: [HT]) i o r. (Monoid m, Loose (U es)) => E (Named nm (Devide m) ': es) i o r -> E es i o (r, Devide m)
+ Control.Monad.Yaftee.Pipe.Tools: instance GHC.Internal.Show.Show m => GHC.Internal.Show.Show (Control.Monad.Yaftee.Pipe.Tools.Devide m)
Files
src/Control/Monad/Yaftee/Pipe/Tools.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE BlockArguments, LambdaCase #-}-{-# LANGUAGE ExplicitForAll, TypeApplications #-}+{-# LANGUAGE ScopedTypeVariables, TypeApplications #-} {-# LANGUAGE RequiredTypeArguments #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleContexts #-}@@ -27,8 +27,12 @@ -- * SCAN - scanl+ scanl, + -- * DEVIDE++ devideRun, devide, devideNs, Devide+ ) where import Prelude hiding (length, filter, scanl)@@ -97,3 +101,65 @@ scanl :: U.Member Pipe.P es => (b -> a -> b) -> b -> Eff.E es a b r scanl op = fix \go v -> (v `op`) <$> Pipe.await >>= \v' -> Pipe.yield v' >> go v'++devideRun :: forall nm m es i o r . (P.Monoid m, HFunctor.Loose (U.U es)) =>+ Eff.E (State.Named nm (Devide m) ': es) i o r ->+ Eff.E es i o (r, Devide m)+devideRun = flip (State.runN @nm) (Devide mempty)++devideNs :: forall nm -> (+ Semigroup m,+ U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>+ (Int -> m -> Maybe (m, m)) -> m -> [Int] -> Eff.E es m m ()+devideNs nm sp bs0 ns0 = do+ State.putN nm $ Devide bs0+ ($ ns0) $ fix \go -> \case+ [] -> pure ()+ n : ns -> do+ Pipe.yield =<< getInput nm sp n+ go ns++devide :: forall nm -> (+ Eq m, P.Monoid m,+ U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>+ (Int -> m -> Maybe (m, m)) -> m -> Int -> Eff.E es m m ()+devide nm sp bs0 n = do+ State.putN nm $ Devide bs0+ fix \go -> do+ bs <- getInput' nm sp n+ if bs == mempty then pure () else Pipe.yield bs >> go++getInput' :: forall m es o . forall nm -> (+ P.Monoid m,+ U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>+ (Int -> m -> Maybe (m, m)) -> Int -> Eff.E es m o m+getInput' nm sp n = State.getN nm >>= \(Devide bs) -> case sp n bs of+ Nothing -> readMore' nm >>= bool+ (unDevide <$> (State.getN nm <* State.putN @(Devide m) nm (Devide mempty)))+ (getInput' nm sp n)+ Just (t, d) -> t <$ State.putN nm (Devide d)++readMore' :: forall nm -> (+ Semigroup mono, U.Member Pipe.P es,+ U.Member (State.Named nm (Devide mono)) es ) =>+ Eff.E es mono o Bool+readMore' nm = Pipe.awaitMaybe >>= \case+ Nothing -> pure False+ Just xs -> True <$ State.modifyN nm (Devide . (<> xs) . unDevide)++getInput :: forall nm -> (+ Semigroup m,+ U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>+ (Int -> m -> Maybe (m, m)) -> Int -> Eff.E es m o m+getInput nm sp n = State.getN nm >>= \(Devide bs) -> case sp n bs of+ Nothing -> readMore nm >> getInput nm sp n+ Just (t, d) -> t <$ State.putN nm (Devide d)++readMore :: forall nm -> (+ Semigroup mono, U.Member Pipe.P es,+ U.Member (State.Named nm (Devide mono)) es ) =>+ Eff.E es mono o ()+readMore nm =+ Pipe.await >>= \xs -> State.modifyN nm (Devide . (<> xs) . unDevide)++newtype Devide m = Devide { unDevide :: m } deriving Show
yaftee-conduit.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: yaftee-conduit-version: 0.1.0.0+version: 0.1.0.1 synopsis: Conduit implemented on Yaftee description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/yaftee-conduit#readme> category: Control