module Prolude.Text
  ( -- $conversions
    -- * Types
    LazyText
  , Text.Text
    -- * Functions
  , lazyTextToString
  , lazyTextToText
  , stringToLazyText
  , stringToText
  , textToLazyText
  , textToString
  )
where

import qualified Data.Text as Text
import qualified Data.Text.Lazy as LazyText

{- $conversions
+----------+------------------+------------------+----------------+
| From/To  | LazyText         | String           | Text           |
+----------+------------------+------------------+----------------+
| LazyText | -                | lazyTextToString | lazyTextToText |
+----------+------------------+------------------+----------------+
| String   | stringToLazyText | -                | stringToText   |
+----------+------------------+------------------+----------------+
| Text     | textToLazyText   | textToString     | -              |
+----------+------------------+------------------+----------------+
-}

type LazyText = LazyText.Text

stringToText :: String -> Text.Text
stringToText :: String -> Text
stringToText = String -> Text
Text.pack

textToString :: Text.Text -> String
textToString :: Text -> String
textToString = Text -> String
Text.unpack

stringToLazyText :: String -> LazyText
stringToLazyText :: String -> LazyText
stringToLazyText = String -> LazyText
LazyText.pack

lazyTextToString :: LazyText -> String
lazyTextToString :: LazyText -> String
lazyTextToString = LazyText -> String
LazyText.unpack

textToLazyText :: Text.Text -> LazyText
textToLazyText :: Text -> LazyText
textToLazyText = Text -> LazyText
LazyText.fromStrict

lazyTextToText :: LazyText -> Text.Text
lazyTextToText :: LazyText -> Text
lazyTextToText = LazyText -> Text
LazyText.toStrict