Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Very partial implementation of the Python Pickle Virtual Machine (protocol 2): i.e. parses pickled data into opcodes, then executes the opcodes to construct a (Haskell representation of a) Python object.
Synopsis
- parse :: ByteString -> Either String [OpCode]
- unpickle :: ByteString -> Either String Value
- pickle :: Value -> ByteString
- opcodes :: [Parser OpCode]
- int :: Parser OpCode
- binint :: Parser OpCode
- binint1 :: Parser OpCode
- binint2 :: Parser OpCode
- long :: Parser OpCode
- long1 :: Parser OpCode
- long4 :: Parser OpCode
- string' :: Parser OpCode
- binstring :: Parser OpCode
- shortBinstring :: Parser OpCode
- binbytes :: Parser OpCode
- shortBinbytes :: Parser OpCode
- binbytes8 :: Parser OpCode
- bytearray8 :: Parser OpCode
- none :: Parser OpCode
- true :: Parser OpCode
- false :: Parser OpCode
- newtrue :: Parser OpCode
- newfalse :: Parser OpCode
- unicode :: Parser OpCode
- binunicode :: Parser OpCode
- shortBinunicode :: Parser OpCode
- binunicode8 :: Parser OpCode
- float :: Parser OpCode
- binfloat :: Parser OpCode
- emptyList :: Parser OpCode
- append :: Parser OpCode
- appends :: Parser OpCode
- list :: Parser OpCode
- emptyTuple :: Parser OpCode
- tuple :: Parser OpCode
- tuple1 :: Parser OpCode
- tuple2 :: Parser OpCode
- tuple3 :: Parser OpCode
- emptyDict :: Parser OpCode
- dict :: Parser OpCode
- setitem :: Parser OpCode
- setitems :: Parser OpCode
- emptySet :: Parser OpCode
- additems :: Parser OpCode
- frozenset :: Parser OpCode
- pop :: Parser OpCode
- dup :: Parser OpCode
- mark :: Parser OpCode
- popmark :: Parser OpCode
- stackGlobal :: Parser OpCode
- get' :: Parser OpCode
- binget :: Parser OpCode
- longBinget :: Parser OpCode
- put' :: Parser OpCode
- binput :: Parser OpCode
- longBinput :: Parser OpCode
- memoize :: Parser OpCode
- ext1 :: Parser OpCode
- ext2 :: Parser OpCode
- ext4 :: Parser OpCode
- global :: Parser OpCode
- reduce :: Parser OpCode
- build :: Parser OpCode
- inst :: Parser OpCode
- obj :: Parser OpCode
- newobj :: Parser OpCode
- newobjEx :: Parser OpCode
- frame :: Parser OpCode
- nextBuffer :: Parser OpCode
- readonlyBuffer :: Parser OpCode
- proto :: Parser OpCode
- stop :: Parser OpCode
- persid :: Parser OpCode
- binpersid :: Parser OpCode
- readSizedVal :: Integral i => ByteString -> Parser i -> (ByteString -> r) -> Parser r
- decimalInt :: Parser Integer
- doubleFloat :: Parser Double
- decimalLong :: Parser Integer
- decodeLong1 :: Parser Integer
- decodeLong4 :: Parser Integer
- byteStringLEToInteger :: ByteString -> Integer
- stringnl :: Parser ByteString
- stringnl' :: Parser ByteString
- float8 :: Parser Double
- anyInt32 :: Parser Int32
- anyInt64 :: Parser Int64
- uint2 :: Parser Integer
- serialize :: OpCode -> Put
- putFloat8 :: Double -> Put
- putUint2 :: Integer -> Put
- encodeLong1 :: Integer -> Put
- data OpCode
- = INT Integer
- | BININT Integer
- | BININT1 Integer
- | BININT2 Integer
- | LONG Integer
- | LONG1 Integer
- | LONG4 Integer
- | STRING ByteString
- | BINSTRING ByteString
- | SHORT_BINSTRING ByteString
- | BINBYTES ByteString
- | SHORT_BINBYTES ByteString
- | BINBYTES8 ByteString
- | BYTEARRAY8 ByteString
- | NEXT_BUFFER
- | READONLY_BUFFER
- | NONE
- | NEWTRUE
- | NEWFALSE
- | UNICODE Text
- | BINUNICODE ByteString
- | SHORT_BINUNICODE ByteString
- | BINUNICODE8 ByteString
- | FLOAT Double
- | BINFLOAT Double
- | EMPTY_LIST
- | APPEND
- | APPENDS
- | LIST
- | EMPTY_TUPLE
- | TUPLE
- | TUPLE1
- | TUPLE2
- | TUPLE3
- | EMPTY_DICT
- | DICT
- | SETITEM
- | SETITEMS
- | EMPTY_SET
- | ADDITEMS
- | FROZENSET
- | POP
- | DUP
- | MARK
- | POP_MARK
- | GET Int
- | BINGET Int
- | LONG_BINGET Integer
- | PUT Int
- | BINPUT Int
- | LONG_BINPUT Integer
- | MEMOIZE
- | EXT1 Int
- | EXT2 Int
- | EXT4 Int
- | GLOBAL ByteString ByteString
- | STACK_GLOBAL
- | REDUCE
- | BUILD
- | INST ByteString ByteString
- | OBJ
- | NEWOBJ
- | NEWOBJ_EX
- | PROTO Int
- | STOP
- | FRAME Int64
- | PERSID ByteString
- | BINPERSID
- data Value
- = Dict [(Value, Value)]
- | List [Value]
- | Tuple [Value]
- | Set (Set Value)
- | FrozenSet (Set Value)
- | None
- | Bool Bool
- | BinInt Integer
- | BinLong Integer
- | BinFloat Double
- | BinString ByteString
- | BinUnicode ByteString
- | ClassObject ByteString ByteString
- | ObjectInstance
- | MarkObject
- unpickle' :: [OpCode] -> Either String Value
- type Stack = [Value]
- type Memo = IntMap Value
- execute :: [OpCode] -> Stack -> Memo -> Either String Value
- executePartial :: [OpCode] -> Stack -> Memo -> (Stack, Memo, [OpCode])
- executeOne :: OpCode -> Stack -> Memo -> Either String (Stack, Memo)
- eOneErr :: String -> Stack -> Memo -> Either String (Stack, Memo)
- executeLookup :: Int -> Stack -> Memo -> Either String (Stack, Memo)
- executeTuple :: [Value] -> Stack -> Memo -> Either String ([Value], Memo)
- executeDict :: [(Value, Value)] -> Stack -> Memo -> Either String ([Value], Memo)
- executeList :: [Value] -> Stack -> Memo -> Either String ([Value], Memo)
- executeSetitem :: Stack -> Memo -> Either String ([Value], Memo)
- executeSetitems :: [(Value, Value)] -> Stack -> Memo -> Either String ([Value], Memo)
- executeAppend :: Stack -> Memo -> Either String ([Value], Memo)
- executeAppends :: [Value] -> Stack -> Memo -> Either String ([Value], Memo)
- executeFrozenSet :: Set Value -> Stack -> Memo -> Either String ([Value], Memo)
- addToDict :: [(Value, Value)] -> Value -> Value
- newtype Pickler a = Pickler {}
- runPickler :: Pickler () -> [OpCode]
- pickle' :: Value -> Pickler ()
- binput' :: Value -> Pickler ()
- pickleDict :: [(Value, Value)] -> Pickler ()
- pickleList :: [Value] -> Pickler ()
- pickleTuple :: [Value] -> Pickler ()
- pickleBinInt :: Integer -> Pickler ()
- pickleBinLong :: Integer -> Pickler ()
- pickleBinFloat :: Double -> Pickler ()
- pickleBinString :: ByteString -> Pickler ()
- pickleBinUnicode :: ByteString -> Pickler ()
- dictGet :: Value -> Value -> Either String (Maybe Value)
- dictGet' :: Value -> Value -> Either String Value
- dictGetString :: Value -> ByteString -> Either String ByteString
- class FromValue a where
Documentation
unpickle :: ByteString -> Either String Value Source #
Unpickle (i.e. deserialize) a Python object. Protocols 0, 1, and 2 are supported.
pickle :: Value -> ByteString Source #
Pickle (i.e. serialize) a Python object. Protocol 2 is used.
readSizedVal :: Integral i => ByteString -> Parser i -> (ByteString -> r) -> Parser r Source #
encodeLong1 :: Integer -> Put Source #
runPickler :: Pickler () -> [OpCode] Source #
pickleList :: [Value] -> Pickler () Source #
pickleTuple :: [Value] -> Pickler () Source #
pickleBinInt :: Integer -> Pickler () Source #
pickleBinLong :: Integer -> Pickler () Source #
pickleBinFloat :: Double -> Pickler () Source #
pickleBinString :: ByteString -> Pickler () Source #
pickleBinUnicode :: ByteString -> Pickler () Source #
dictGetString :: Value -> ByteString -> Either String ByteString Source #
class FromValue a where Source #
Instances
FromValue ByteString Source # | |
Defined in Language.Python.Pickle | |
FromValue Text Source # | |
FromValue Integer Source # | |
FromValue Bool Source # | |
FromValue Double Source # | |
FromValue Int Source # | |
(FromValue a, Ord a) => FromValue (Set a) Source # | |
FromValue a => FromValue [a] Source # | |
(FromValue k, FromValue v, Ord k) => FromValue (Map k v) Source # | |
(FromValue a, FromValue b) => FromValue (a, b) Source # | |
(FromValue a, FromValue b, FromValue c) => FromValue (a, b, c) Source # | |
(FromValue a, FromValue b, FromValue c, FromValue d) => FromValue (a, b, c, d) Source # | |
(FromValue a, FromValue b, FromValue c, FromValue d, FromValue e) => FromValue (a, b, c, d, e) Source # | |
(FromValue a, FromValue b, FromValue c, FromValue d, FromValue e, FromValue f) => FromValue (a, b, c, d, e, f) Source # | |
(FromValue a, FromValue b, FromValue c, FromValue d, FromValue e, FromValue f, FromValue g) => FromValue (a, b, c, d, e, f, g) Source # | |