2018-10-15

Haskell strings field guide

Here’s how to convert between byte, string, and character types in Haskell:

Function Type
encodeUtf8 Text -> ByteString
unpack Text -> String
decodeLatin1 ByteString -> Text
decodeUtf8With lenientDecode ByteString -> Text
BC.unpack ByteString -> String
UTF8.toString ByteString -> String
B.unpack ByteString -> [Word8]
UTF8.fromString String -> ByteString
pack String -> Text
w2c Word8 -> Char
B.pack [Word8] -> ByteString
c2w ❌ partial Char -> Word8
BC.pack ❌ partial String -> ByteString
BSC.string ❌ stops streaming String -> BSC.ByteString

Note that Char is finite:

toEnum 10000000 :: Char
*** Exception: Prelude.chr: bad argument: 10000000