packed-data-0.2.0.0
Safe HaskellNone
LanguageHaskell2010

Data.Packed.Reader

Description

It is recommended to import this module like so:

import qualified Data.Packed.Reader as R
Synopsis

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

Instances details
Functor (PackedReader p r) Source # 
Instance details

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

pure :: forall v (r :: [Type]). v -> PackedReader ('[] :: [Type]) r v Source #

Similar to pure

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

Constructors

PF 

Fields

  • !(Ptr Word8)

    Pointer in the packed buffer

  • !Int

    Number of bytes between the cursor's position and the end of the buffer

castPackedFragment :: forall (p :: [Type]) (t :: [Type]). PackedFragment p -> PackedFragment t Source #