Implementation based on the specification found at http://yence.sourceforge.net/docs/protocol/version1_3_draft.html.
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.
y_enc $ Data.ByteString.Char8.pack "foobar"("\144\153\153\140\139\156","")
snd $ y_enc $ Data.ByteString.Char8.pack $ Data.List.take 257 $ repeat '\x13'"\DC3"
y_dec $ Data.ByteString.pack [144,153,153,140,139,156]Right "foobar"
y_dec $ Data.ByteString.Char8.pack "=}"Right "\DC3"
Left value is only ever returned on decoding errors.
y_dec $ Data.ByteString.Char8.pack "="Left ("","=")
Convenient function that calls
y_enc repeatedly until the whole input
data is encoded.