, newInteraction
, defaultPageContentType
+ , chunksToLBS
+ , chunksFromLBS
+
, writeItr
, readItr
- , readItrF
, updateItr
- , updateItrF
)
where
import Control.Applicative
import Control.Concurrent.STM
import Data.Ascii (Ascii)
import qualified Data.ByteString as BS
+import qualified Data.ByteString.Lazy as LBS
+import Data.Foldable
import Data.Sequence (Seq)
import qualified Data.Sequence as S
import Network.Socket
, itrWroteHeader = wroteHeader
}
-writeItr ∷ Interaction → (Interaction → TVar a) → a → STM ()
+chunksToLBS ∷ Seq BS.ByteString → LBS.ByteString
+{-# INLINE chunksToLBS #-}
+chunksToLBS = LBS.fromChunks ∘ toList
+
+chunksFromLBS ∷ LBS.ByteString → Seq BS.ByteString
+{-# INLINE chunksFromLBS #-}
+chunksFromLBS = S.fromList ∘ LBS.toChunks
+
+writeItr ∷ (Interaction → TVar a) → a → Interaction → STM ()
{-# INLINE writeItr #-}
-writeItr itr accessor
- = writeTVar (accessor itr)
+writeItr accessor a itr
+ = writeTVar (accessor itr) a
-readItr ∷ Interaction → (Interaction → TVar a) → (a → b) → STM b
+readItr ∷ (Interaction → TVar a) → (a → b) → Interaction → STM b
{-# INLINE readItr #-}
-readItr itr accessor reader
+readItr accessor reader itr
= reader <$> readTVar (accessor itr)
-readItrF ∷ Functor f => Interaction → (Interaction → TVar (f a)) → (a → b) → STM (f b)
-{-# INLINE readItrF #-}
-readItrF itr accessor reader
- = readItr itr accessor (fmap reader)
-
-updateItr ∷ Interaction → (Interaction → TVar a) → (a → a) → STM ()
+updateItr ∷ (Interaction → TVar a) → (a → a) → Interaction → STM ()
{-# INLINE updateItr #-}
-updateItr itr accessor updator
- = do old ← readItr itr accessor id
- writeItr itr accessor (updator old)
-
-updateItrF ∷ Functor f => Interaction → (Interaction → TVar (f a)) → (a → a) → STM ()
-{-# INLINE updateItrF #-}
-updateItrF itr accessor
- = updateItr itr accessor ∘ fmap
+updateItr accessor updator itr
+ = do old ← readItr accessor id itr
+ writeItr accessor (updator old) itr