module Streaming.Primitive where

import Control.Monad.Primitive
import Streaming



-- | Orphan instance providing a primitive monad instance for streams. Allows
-- impurely folds into mutable vectors from streams.

instance (Monad m, PrimMonad m, Functor f)  PrimMonad (Stream f m) where
  type PrimState (Stream f m) = PrimState m
  {-# Inline primitive #-}
  primitive :: (State# (PrimState (Stream f m))
 -> (# State# (PrimState (Stream f m)), a #))
-> Stream f m a
primitive = m a -> Stream f m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m a -> Stream f m a)
-> ((State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a)
-> (State# (PrimState m) -> (# State# (PrimState m), a #))
-> Stream f m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
forall (m :: * -> *) a.
PrimMonad m =>
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
primitive