| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Text.Conversions
Description
This module provides a set of typeclasses for safely converting between
textual data. The built-in String type, as well as strict Text
and lazy Text, are safely convertible between one another.
The ByteString type is frequently treated in much the same
manner, but this is unsafe for two reasons:
- Since
ByteStringencodes binary data, it does not specify a particular encoding, so assuming a particular encoding like UTF-8 would be incorrect. - Furthermore, decoding binary data into text given a particular encoding can
fail. Most systems simply use
decodeUtf8and similar functions, which will dangerously throw exceptions when given invalid data.
This module addresses both problems by providing a DecodeText typeclass for
decoding binary data in a way that can fail and by providing a UTF8 wrapper
type for selecting the desired encoding.
Most of the time, you will not need to create your own instances or use the
underlying functions that make the conversion machinery tick. Instead, just
use the convertText method to automatically convert between two textual
datatypes automatically, whatever they may be.
Examples:
>>>convertText ("hello" :: String) :: Text"hello">>>convertText (UTF8 ("hello" :: ByteString)) :: Maybe TextJust "hello">>>convertText (UTF8 ("\xc3\x28" :: ByteString)) :: Maybe TextNothing
- class ConvertText a b where
- convertText :: a -> b
- class Functor f => DecodeText f a where
- decodeText :: a -> f Text
- class FromText a where
- class ToText a where
- newtype UTF8 a = UTF8 {
- unUTF8 :: a
Documentation
class ConvertText a b where Source
A typeclass that provides a way to safely convert between arbitrary textual
datatypes, including conversions that can potentially fail.
Do not implement this typeclass directly, implement ToText, FromText,
or DecodeText, instead, which this typeclass defers to. Use the
convertText function to actually perform conversions.
At a basic level, convertText can convert between textual types, like
between String and Text:
>>>convertText ("hello" :: String) :: Text"hello"
More interestingly, convertText can also convert between binary data and
textual data in the form of ByteString. Since binary data
can represent text in many different potential encodings, it is necessary to
use a newtype that picks the particular encoding, like UTF8:
>>>convertText (UTF8 ("hello" :: ByteString)) :: Maybe TextJust "hello"
Note that the result of converting a ByteString is a Maybe
Text since the decoding can fail.
Methods
convertText :: a -> b Source
Instances
| (ToText a, FromText b) => ConvertText a b Source | |
| (DecodeText Maybe a, FromText b) => ConvertText a (Maybe b) Source | |
| (DecodeText (Either e) a, FromText b) => ConvertText a (Either e b) Source |
class Functor f => DecodeText f a where Source
A simple typeclass that handles converting arbitrary datatypes to
Text when the operation can fail (the functor in question is
expected to be Maybe or Either). If you have a type
that satisfies that requirement, implement this typeclass, not
ConvertText. However, you probably do not want to call decodeText
directly; call convertText, instead.
Methods
decodeText :: a -> f Text Source
Instances
A simple typeclass that handles converting Text to arbitrary
datatypes. If you have a type that can be produced from text, implement this
typeclass, not ConvertText. However, you probably do not want to call
fromText directly; call convertText, instead.
A simple typeclass that handles converting arbitrary datatypes to
Text when the operation cannot fail. If you have a type that
satisfies that requirement, implement this typeclass, not ConvertText.
However, you probably do not want to call toText directly; call
convertText, instead.
Simple wrapper type that is used to select a desired encoding when encoding or
decoding text from binary data, such as ByteStrings.
Instances
| Functor UTF8 Source | |
| DecodeText Maybe (UTF8 ByteString) Source | |
| DecodeText Maybe (UTF8 ByteString) Source | |
| Eq a => Eq (UTF8 a) Source | |
| Show a => Show (UTF8 a) Source | |
| FromText (UTF8 ByteString) Source | |
| FromText (UTF8 ByteString) Source |