sandi-0.5: Data encoding library

Copyright(c) 2012 Magnus Therning
Safe HaskellNone



Implementation based on the specification found at



yEncode :: ByteString -> (ByteString, ByteString) Source #

Encoding function.

This function allocates enough space to hold 20% more than the size of the indata (or at least 512 bytes) and then encodes as much as possible of the indata. That means there is a risk that the encoded data won't fit and in that case the second part of the pair contains the remainder of the indata.

>>> yEncode $ Data.ByteString.Char8.pack "foobar"
>>> snd $ yEncode $ Data.ByteString.Char8.pack $ Data.List.take 257 $ repeat '\x13'

yDecode :: ByteString -> Either (ByteString, ByteString) (ByteString, ByteString) Source #

Decoding function.

>>> yDecode $ Data.ByteString.pack [144,153,153,140,139,156]
Right ("foobar","")
>>> yDecode $ Data.ByteString.Char8.pack "=}"
Right ("\DC3","")

A Left value is only ever returned on decoding errors which, due to characteristics of the encoding, can never happen.

>>> yDecode $ Data.ByteString.Char8.pack "="
Right ("","=")

encode :: ByteString -> ByteString Source #

Convenient function that calls y_enc repeatedly until the whole input data is encoded.