-- | Text utility functions.
module NLP.Minimorph.Util
 ( (<+>), tshow )
 where

#if !(MIN_VERSION_base(4,11,0))
  -- this is redundant starting with base-4.11 / GHC 8.4
import Data.Semigroup
#endif

import qualified Data.Char as Char
import           Data.Text (Text)
import qualified Data.Text as T

infixr 6 <+>  -- matches Monoid.<>
-- | Separated by space unless one of them is empty (in which case just
--   the non-empty one) or the first ends or the last begins with whitespace.
(<+>) :: Text -> Text -> Text
Text
t1 <+> :: Text -> Text -> Text
<+> Text
t2 | Text -> Bool
T.null Text
t1 = Text
t2
          | Text -> Bool
T.null Text
t2 = Text
t1
          | Char -> Bool
Char.isSpace (Text -> Char
T.last Text
t1) Bool -> Bool -> Bool
|| Char -> Bool
Char.isSpace (Text -> Char
T.head Text
t2) = Text
t1 Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
t2
          | Bool
otherwise = Text
t1 Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
t2

-- | Show a value in `Text` format.
tshow :: Show a => a -> Text
tshow :: a -> Text
tshow = String -> Text
T.pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show