packages feed

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