-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Parse a subset of Ruby objects serialised with Marshal.dump.
--
-- Parse a subset of Ruby objects serialised with Marshal.dump.
@package ruby-marshal
@version 0.1.2
-- | Parsers for signed and unsigned integrals.
module Data.Ruby.Marshal.Int
-- | Read an Int8.
getInt8 :: Get Int8
-- | Read an Int16.
getInt16le :: Get Int16
-- | Read an Int24. Since Int24 unavailable in Data.Int we use Int32.
getInt24le :: Get Int32
-- | Read an Int32.
getInt32le :: Get Int32
-- | 16-bit signed integer type
data Int16 :: *
getWord8 :: Get Word8
getWord16le :: Get Word16
-- | Read a Word24 in little endian format. Since Word24 unavailable in
-- Data.Int we use Word32.
getWord24le :: Get Word32
getWord32le :: Get Word32
-- | 8-bit unsigned integer type
data Word8 :: *
-- | Ruby encoding types.
module Data.Ruby.Marshal.Encoding
-- | Lowers encoding ADT into an encoding string.
fromEnc :: RubyStringEncoding -> ByteString
-- | Lifts encoding strings into encoding ADT.
toEnc :: ByteString -> RubyStringEncoding
-- | ADT representing all supported Ruby encodings.
data RubyStringEncoding
ASCII_8BIT :: RubyStringEncoding
Big5 :: RubyStringEncoding
Big5_HKSCS :: RubyStringEncoding
Big5_UAO :: RubyStringEncoding
CP50220 :: RubyStringEncoding
CP50221 :: RubyStringEncoding
CP51932 :: RubyStringEncoding
CP850 :: RubyStringEncoding
CP852 :: RubyStringEncoding
CP855 :: RubyStringEncoding
CP949 :: RubyStringEncoding
CP950 :: RubyStringEncoding
CP951 :: RubyStringEncoding
EUC_JP :: RubyStringEncoding
EUC_JP_2004 :: RubyStringEncoding
EUC_KR :: RubyStringEncoding
EUC_TW :: RubyStringEncoding
Emacs_Mule :: RubyStringEncoding
EucJP_ms :: RubyStringEncoding
GB12345 :: RubyStringEncoding
GB18030 :: RubyStringEncoding
GB1988 :: RubyStringEncoding
GB2312 :: RubyStringEncoding
GBK :: RubyStringEncoding
IBM437 :: RubyStringEncoding
IBM737 :: RubyStringEncoding
IBM775 :: RubyStringEncoding
IBM852 :: RubyStringEncoding
IBM855 :: RubyStringEncoding
IBM857 :: RubyStringEncoding
IBM860 :: RubyStringEncoding
IBM861 :: RubyStringEncoding
IBM862 :: RubyStringEncoding
IBM863 :: RubyStringEncoding
IBM864 :: RubyStringEncoding
IBM865 :: RubyStringEncoding
IBM866 :: RubyStringEncoding
IBM869 :: RubyStringEncoding
ISO_2022_JP :: RubyStringEncoding
ISO_2022_JP_2 :: RubyStringEncoding
ISO_2022_JP_KDDI :: RubyStringEncoding
ISO_8859_1 :: RubyStringEncoding
ISO_8859_10 :: RubyStringEncoding
ISO_8859_11 :: RubyStringEncoding
ISO_8859_13 :: RubyStringEncoding
ISO_8859_14 :: RubyStringEncoding
ISO_8859_15 :: RubyStringEncoding
ISO_8859_16 :: RubyStringEncoding
ISO_8859_2 :: RubyStringEncoding
ISO_8859_3 :: RubyStringEncoding
ISO_8859_4 :: RubyStringEncoding
ISO_8859_5 :: RubyStringEncoding
ISO_8859_6 :: RubyStringEncoding
ISO_8859_7 :: RubyStringEncoding
ISO_8859_8 :: RubyStringEncoding
ISO_8859_9 :: RubyStringEncoding
KOI8_R :: RubyStringEncoding
KOI8_U :: RubyStringEncoding
MacCentEuro :: RubyStringEncoding
MacCroatian :: RubyStringEncoding
MacCyrillic :: RubyStringEncoding
MacGreek :: RubyStringEncoding
MacIceland :: RubyStringEncoding
MacJapanese :: RubyStringEncoding
MacRoman :: RubyStringEncoding
MacRomania :: RubyStringEncoding
MacThai :: RubyStringEncoding
MacTurkish :: RubyStringEncoding
MacUkraine :: RubyStringEncoding
SJIS_DoCoMo :: RubyStringEncoding
SJIS_KDDI :: RubyStringEncoding
SJIS_SoftBank :: RubyStringEncoding
Shift_JIS :: RubyStringEncoding
Stateless_ISO_2022_JP :: RubyStringEncoding
Stateless_ISO_2022_JP_KDDI :: RubyStringEncoding
TIS_620 :: RubyStringEncoding
US_ASCII :: RubyStringEncoding
UTF8_DoCoMo :: RubyStringEncoding
UTF8_KDDI :: RubyStringEncoding
UTF8_MAC :: RubyStringEncoding
UTF8_SoftBank :: RubyStringEncoding
UTF_16 :: RubyStringEncoding
UTF_16BE :: RubyStringEncoding
UTF_16LE :: RubyStringEncoding
UTF_32 :: RubyStringEncoding
UTF_32BE :: RubyStringEncoding
UTF_32LE :: RubyStringEncoding
UTF_7 :: RubyStringEncoding
UTF_8 :: RubyStringEncoding
Windows_1250 :: RubyStringEncoding
Windows_1251 :: RubyStringEncoding
Windows_1252 :: RubyStringEncoding
Windows_1253 :: RubyStringEncoding
Windows_1254 :: RubyStringEncoding
Windows_1255 :: RubyStringEncoding
Windows_1256 :: RubyStringEncoding
Windows_1257 :: RubyStringEncoding
Windows_1258 :: RubyStringEncoding
Windows_31J :: RubyStringEncoding
Windows_874 :: RubyStringEncoding
UnsupportedEncoding :: RubyStringEncoding
instance Eq RubyStringEncoding
instance Ord RubyStringEncoding
instance Show RubyStringEncoding
-- | Core RubyObject data representation.
module Data.Ruby.Marshal.RubyObject
-- | Representation of a Ruby object.
data RubyObject
-- | represents nil
RNil :: RubyObject
-- | represents true or false
RBool :: !Bool -> RubyObject
-- | represents a Fixnum
RFixnum :: {-# UNPACK #-} !Int -> RubyObject
-- | represents an Array
RArray :: !(Vector RubyObject) -> RubyObject
-- | represents an Hash
RHash :: !(Vector (RubyObject, RubyObject)) -> RubyObject
-- | represents an IVar
RIVar :: !(RubyObject, RubyStringEncoding) -> RubyObject
-- | represents a String
RString :: !ByteString -> RubyObject
-- | represents a Float
RFloat :: {-# UNPACK #-} !Float -> RubyObject
-- | represents a Symbol
RSymbol :: !ByteString -> RubyObject
-- | represents an invalid object
Unsupported :: RubyObject
-- | Transform plain Haskell values to RubyObjects and back.
class Rubyable a
toRuby :: Rubyable a => a -> RubyObject
fromRuby :: Rubyable a => RubyObject -> Maybe a
instance [incoherent] Eq RubyObject
instance [incoherent] Ord RubyObject
instance [incoherent] Show RubyObject
instance [incoherent] (Rubyable a, Rubyable b, Ord a) => Rubyable (Map a b)
instance [incoherent] (Rubyable a, Rubyable b) => Rubyable [(a, b)]
instance [incoherent] Rubyable a => Rubyable [a]
instance [incoherent] Rubyable a => Rubyable (Maybe a)
instance [incoherent] Rubyable (ByteString, RubyStringEncoding)
instance [incoherent] Rubyable Float
instance [incoherent] Rubyable ByteString
instance [incoherent] (Rubyable a, Rubyable b) => Rubyable (Vector (a, b))
instance [incoherent] Rubyable a => Rubyable (Vector a)
instance [incoherent] Rubyable Int
instance [incoherent] Rubyable Bool
instance [incoherent] Rubyable ()
instance [incoherent] Rubyable RubyObject
-- | Marshal monad provides an object cache over the Get monad.
module Data.Ruby.Marshal.Monad
-- | Marshal monad endows the underlying Get monad with State.
newtype Marshal a
Marshal :: StateT Cache Get a -> Marshal a
runMarshal :: Marshal a -> StateT Cache Get a
-- | Lift Get monad into Marshal monad.
liftMarshal :: Get a -> Marshal a
-- | State that we must carry around during deserialisation.
data Cache
Cache :: !(Vector RubyObject) -> !(Vector RubyObject) -> Cache
-- | object cache.
objects :: Cache -> !(Vector RubyObject)
-- | symbol cache.
symbols :: Cache -> !(Vector RubyObject)
-- | Constructs an empty cache to store symbols and objects.
emptyCache :: Cache
-- | Look up value in cache.
readCache :: Int -> (Cache -> Vector RubyObject) -> Marshal (Maybe RubyObject)
-- | Look up object in object cache.
readObject :: Int -> Marshal (Maybe RubyObject)
-- | Look up a symbol in symbol cache.
readSymbol :: Int -> Marshal (Maybe RubyObject)
-- | Write an object to the appropriate cache.
writeCache :: RubyObject -> Marshal ()
instance Show Cache
instance Functor Marshal
instance Applicative Marshal
instance Monad Marshal
instance MonadState Cache Marshal
-- | Common types for Ruby Marshal deserialisation.
module Data.Ruby.Marshal.Types
-- | Marshal monad endows the underlying Get monad with State.
data Marshal a
-- | State that we must carry around during deserialisation.
data Cache
-- | ADT representing all supported Ruby encodings.
data RubyStringEncoding
ASCII_8BIT :: RubyStringEncoding
Big5 :: RubyStringEncoding
Big5_HKSCS :: RubyStringEncoding
Big5_UAO :: RubyStringEncoding
CP50220 :: RubyStringEncoding
CP50221 :: RubyStringEncoding
CP51932 :: RubyStringEncoding
CP850 :: RubyStringEncoding
CP852 :: RubyStringEncoding
CP855 :: RubyStringEncoding
CP949 :: RubyStringEncoding
CP950 :: RubyStringEncoding
CP951 :: RubyStringEncoding
EUC_JP :: RubyStringEncoding
EUC_JP_2004 :: RubyStringEncoding
EUC_KR :: RubyStringEncoding
EUC_TW :: RubyStringEncoding
Emacs_Mule :: RubyStringEncoding
EucJP_ms :: RubyStringEncoding
GB12345 :: RubyStringEncoding
GB18030 :: RubyStringEncoding
GB1988 :: RubyStringEncoding
GB2312 :: RubyStringEncoding
GBK :: RubyStringEncoding
IBM437 :: RubyStringEncoding
IBM737 :: RubyStringEncoding
IBM775 :: RubyStringEncoding
IBM852 :: RubyStringEncoding
IBM855 :: RubyStringEncoding
IBM857 :: RubyStringEncoding
IBM860 :: RubyStringEncoding
IBM861 :: RubyStringEncoding
IBM862 :: RubyStringEncoding
IBM863 :: RubyStringEncoding
IBM864 :: RubyStringEncoding
IBM865 :: RubyStringEncoding
IBM866 :: RubyStringEncoding
IBM869 :: RubyStringEncoding
ISO_2022_JP :: RubyStringEncoding
ISO_2022_JP_2 :: RubyStringEncoding
ISO_2022_JP_KDDI :: RubyStringEncoding
ISO_8859_1 :: RubyStringEncoding
ISO_8859_10 :: RubyStringEncoding
ISO_8859_11 :: RubyStringEncoding
ISO_8859_13 :: RubyStringEncoding
ISO_8859_14 :: RubyStringEncoding
ISO_8859_15 :: RubyStringEncoding
ISO_8859_16 :: RubyStringEncoding
ISO_8859_2 :: RubyStringEncoding
ISO_8859_3 :: RubyStringEncoding
ISO_8859_4 :: RubyStringEncoding
ISO_8859_5 :: RubyStringEncoding
ISO_8859_6 :: RubyStringEncoding
ISO_8859_7 :: RubyStringEncoding
ISO_8859_8 :: RubyStringEncoding
ISO_8859_9 :: RubyStringEncoding
KOI8_R :: RubyStringEncoding
KOI8_U :: RubyStringEncoding
MacCentEuro :: RubyStringEncoding
MacCroatian :: RubyStringEncoding
MacCyrillic :: RubyStringEncoding
MacGreek :: RubyStringEncoding
MacIceland :: RubyStringEncoding
MacJapanese :: RubyStringEncoding
MacRoman :: RubyStringEncoding
MacRomania :: RubyStringEncoding
MacThai :: RubyStringEncoding
MacTurkish :: RubyStringEncoding
MacUkraine :: RubyStringEncoding
SJIS_DoCoMo :: RubyStringEncoding
SJIS_KDDI :: RubyStringEncoding
SJIS_SoftBank :: RubyStringEncoding
Shift_JIS :: RubyStringEncoding
Stateless_ISO_2022_JP :: RubyStringEncoding
Stateless_ISO_2022_JP_KDDI :: RubyStringEncoding
TIS_620 :: RubyStringEncoding
US_ASCII :: RubyStringEncoding
UTF8_DoCoMo :: RubyStringEncoding
UTF8_KDDI :: RubyStringEncoding
UTF8_MAC :: RubyStringEncoding
UTF8_SoftBank :: RubyStringEncoding
UTF_16 :: RubyStringEncoding
UTF_16BE :: RubyStringEncoding
UTF_16LE :: RubyStringEncoding
UTF_32 :: RubyStringEncoding
UTF_32BE :: RubyStringEncoding
UTF_32LE :: RubyStringEncoding
UTF_7 :: RubyStringEncoding
UTF_8 :: RubyStringEncoding
Windows_1250 :: RubyStringEncoding
Windows_1251 :: RubyStringEncoding
Windows_1252 :: RubyStringEncoding
Windows_1253 :: RubyStringEncoding
Windows_1254 :: RubyStringEncoding
Windows_1255 :: RubyStringEncoding
Windows_1256 :: RubyStringEncoding
Windows_1257 :: RubyStringEncoding
Windows_1258 :: RubyStringEncoding
Windows_31J :: RubyStringEncoding
Windows_874 :: RubyStringEncoding
UnsupportedEncoding :: RubyStringEncoding
-- | Representation of a Ruby object.
data RubyObject
-- | represents nil
RNil :: RubyObject
-- | represents true or false
RBool :: !Bool -> RubyObject
-- | represents a Fixnum
RFixnum :: {-# UNPACK #-} !Int -> RubyObject
-- | represents an Array
RArray :: !(Vector RubyObject) -> RubyObject
-- | represents an Hash
RHash :: !(Vector (RubyObject, RubyObject)) -> RubyObject
-- | represents an IVar
RIVar :: !(RubyObject, RubyStringEncoding) -> RubyObject
-- | represents a String
RString :: !ByteString -> RubyObject
-- | represents a Float
RFloat :: {-# UNPACK #-} !Float -> RubyObject
-- | represents a Symbol
RSymbol :: !ByteString -> RubyObject
-- | represents an invalid object
Unsupported :: RubyObject
-- | Character that represents NilCharlass.
-- | Character that represents FalseClass.
-- | Character that represents TrueClass.
-- | Character that represents Array.
-- | Character that represents Fixnum.
-- | Character that represents Float.
-- | Character that represents Hash.
-- | Character that represents IVar.
-- | Character that represents Object link.
-- | Character that represents String.
-- | Character that represents Symbol.
-- | Character that represents Symlink.
-- | Parsers for Ruby Marshal format.
module Data.Ruby.Marshal.Get
-- | Parses Marshal version.
getMarshalVersion :: Marshal (Word8, Word8)
-- | Parses a subset of Ruby objects.
getRubyObject :: Marshal RubyObject
-- | Simple interface to parse Ruby Marshal binary.
module Data.Ruby.Marshal
-- | Parses a subset of Ruby objects serialised with Marshal, Ruby's
-- built-in binary serialisation format.
decode :: ByteString -> Maybe RubyObject
-- | Parses a subset of Ruby objects serialised with Marshal, Ruby's
-- built-in binary serialisation format.
decodeEither :: ByteString -> Either String RubyObject
-- | Takes a RubyObject transforms it into a more general Haskell value.
fromRuby :: Rubyable a => RubyObject -> Maybe a
-- | Takes a plain Haskell value and lifts into RubyObject
toRuby :: Rubyable a => a -> RubyObject