dhall-haskell/dhall-lsp-server/src/Dhall/LSP/Util.hs

34 lines
849 B
Haskell

-- | Miscellaneous utility functions
module Dhall.LSP.Util (
tshow,
lines',
rightToMaybe,
unlines'
) where
import Data.Text
import Data.List.NonEmpty
-- | Shorthand for @pack . show@. Useful since we are mostly working with Text
-- rather than String.
tshow :: Show a => a -> Text
tshow = pack . show
-- | A variant of @Data.Text.lines@ that does not swallow the last empty. Always
-- returns at least the empty line!
lines' :: Text -> NonEmpty Text
lines' text =
case split (== '\n') text of
[] -> "" :| [] -- this case never occurs!
l : ls -> l :| ls
-- | A variant of @Data.Text.unlines@ that is the exact inverse to @lines'@ (and
-- vice-versa).
unlines' :: [Text] -> Text
unlines' = intercalate "\n"
rightToMaybe :: Either a b -> Maybe b
rightToMaybe (Right b) = Just b
rightToMaybe (Left _) = Nothing