Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Packed.Reader
Description
It is recommended to import this module like so:
import qualified Data.Packed.Reader as R
Synopsis
- newtype PackedReader (p :: [Type]) (r :: [Type]) v = PackedReader {
- runReaderStep :: PackedFragment (p :++: r) -> Identity (v, PackedFragment r)
- mkPackedReader :: forall (p :: [Type]) (r :: [Type]) v. (PackedFragment (p :++: r) -> Identity (v, PackedFragment r)) -> PackedReader p r v
- runReader :: forall (p :: [Type]) (r :: [Type]) v. PackedReader p r v -> Packed (p :++: r) -> (v, Packed r)
- pure :: forall v (r :: [Type]). v -> PackedReader ('[] :: [Type]) r v
- liftA :: forall a b (p :: [Type]) (t :: [Type]). (a -> b) -> PackedReader p t a -> PackedReader p t b
- liftA2 :: forall v1 v2 v3 (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]). (v1 -> v2 -> v3) -> PackedReader p (r1 :++: r2) v1 -> PackedReader r1 r2 v2 -> PackedReader (p :++: r1) r2 v3
- (<*>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v1 v2. PackedReader p (r1 :++: r2) (v1 -> v2) -> PackedReader r1 r2 v1 -> PackedReader (p :++: r1) r2 v2
- (*>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> PackedReader r1 r2 v' -> PackedReader (p :++: r1) r2 v'
- (<*) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v2 v1. PackedReader p (r1 :++: r2) v2 -> PackedReader r1 r2 v1 -> PackedReader (p :++: r1) r2 v2
- (>>=) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> (v -> PackedReader r1 r2 v') -> PackedReader (p :++: r1) r2 v'
- (>>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> PackedReader r1 r2 v' -> PackedReader (p :++: r1) r2 v'
- fail :: forall (r :: [Type]) v. String -> PackedReader ('[] :: [Type]) r v
- return :: forall v (r :: [Type]). v -> PackedReader ('[] :: [Type]) r v
- lift :: forall (a :: [Type]) (b :: [Type]) v (r :: [Type]). PackedReader a b v -> PackedFragment (a :++: b) -> PackedReader ('[] :: [Type]) r v
- with :: forall (p :: [Type]) (r :: [Type]) v. PackedReader p r v -> PackedFragment (p :++: r) -> Identity (v, PackedFragment r)
- threadedWith :: forall (p :: [Type]) (r :: [Type]) v. PackedFragment (p :++: r) -> PackedReader p r v -> Identity (v, PackedFragment r)
- data PackedFragment (p :: [Type]) = PF !(Ptr Word8) !Int
- castPackedFragment :: forall (p :: [Type]) (t :: [Type]). PackedFragment p -> PackedFragment t
Documentation
newtype PackedReader (p :: [Type]) (r :: [Type]) v Source #
Basically a function that reads/desrialises a value from a Packed
p
the types of the packed values to read
r
the packed type after the encoded values to read
v
the type of the value to unpack
Note: It is an indexed monad.
Constructors
PackedReader | |
Fields
|
Instances
Functor (PackedReader p r) Source # | |
Defined in Data.Packed.Reader Methods fmap :: (a -> b) -> PackedReader p r a -> PackedReader p r b # (<$) :: a -> PackedReader p r b -> PackedReader p r a # |
mkPackedReader :: forall (p :: [Type]) (r :: [Type]) v. (PackedFragment (p :++: r) -> Identity (v, PackedFragment r)) -> PackedReader p r v Source #
Builds a PackedReader
runReader :: forall (p :: [Type]) (r :: [Type]) v. PackedReader p r v -> Packed (p :++: r) -> (v, Packed r) Source #
Run the reading function using a Packed
.
Applicative
liftA :: forall a b (p :: [Type]) (t :: [Type]). (a -> b) -> PackedReader p t a -> PackedReader p t b Source #
Similar to liftA
liftA2 :: forall v1 v2 v3 (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]). (v1 -> v2 -> v3) -> PackedReader p (r1 :++: r2) v1 -> PackedReader r1 r2 v2 -> PackedReader (p :++: r1) r2 v3 Source #
Similar to liftA2
(<*>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v1 v2. PackedReader p (r1 :++: r2) (v1 -> v2) -> PackedReader r1 r2 v1 -> PackedReader (p :++: r1) r2 v2 Source #
Similar to <*>
(*>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> PackedReader r1 r2 v' -> PackedReader (p :++: r1) r2 v' Source #
Similar to *>
(<*) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v2 v1. PackedReader p (r1 :++: r2) v2 -> PackedReader r1 r2 v1 -> PackedReader (p :++: r1) r2 v2 Source #
Similar to <*
Monad
(>>=) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> (v -> PackedReader r1 r2 v') -> PackedReader (p :++: r1) r2 v' Source #
Allows bindings PackedReader
together, in a monad-like manner.
Similar to >>=
(>>) :: forall (p :: [Type]) (r1 :: [Type]) (r2 :: [Type]) v v'. PackedReader p (r1 :++: r2) v -> PackedReader r1 r2 v' -> PackedReader (p :++: r1) r2 v' Source #
Similar to >>
fail :: forall (r :: [Type]) v. String -> PackedReader ('[] :: [Type]) r v Source #
Interrupts a PackedReader
computation
return :: forall v (r :: [Type]). v -> PackedReader ('[] :: [Type]) r v Source #
Like return
, wraps a value in a PackedReader
that will not consume its input.
lift :: forall (a :: [Type]) (b :: [Type]) v (r :: [Type]). PackedReader a b v -> PackedFragment (a :++: b) -> PackedReader ('[] :: [Type]) r v Source #
Allows running a PackedReader
computation inside an other
Application
with :: forall (p :: [Type]) (r :: [Type]) v. PackedReader p r v -> PackedFragment (p :++: r) -> Identity (v, PackedFragment r) Source #
Consumes the input PackedFragment
.
To be used inside a PackedReader
computation.
Example:
sumPacked :: PackedReader '[Tree Int] r Int
sumPacked = PackedReader $ case
PackedLeaf l -> reader with
l
PackedNode n -> threadedWith n $ R.do
!left <- sumPacked2
!right <- sumPacked2
let !res = left + right
R.return res
threadedWith :: forall (p :: [Type]) (r :: [Type]) v. PackedFragment (p :++: r) -> PackedReader p r v -> Identity (v, PackedFragment r) Source #
Flipped version of with
Fragments
data PackedFragment (p :: [Type]) Source #
Represents position of the cursor in the packed buffer to traverse
castPackedFragment :: forall (p :: [Type]) (t :: [Type]). PackedFragment p -> PackedFragment t Source #