summaryrefslogtreecommitdiff
path: root/fig-utils/src/Fig/Prelude.hs
diff options
context:
space:
mode:
Diffstat (limited to 'fig-utils/src/Fig/Prelude.hs')
-rw-r--r--fig-utils/src/Fig/Prelude.hs119
1 files changed, 119 insertions, 0 deletions
diff --git a/fig-utils/src/Fig/Prelude.hs b/fig-utils/src/Fig/Prelude.hs
new file mode 100644
index 0000000..ceddba0
--- /dev/null
+++ b/fig-utils/src/Fig/Prelude.hs
@@ -0,0 +1,119 @@
+module Fig.Prelude
+ ( quot, mod, rem, quotRem
+ , module GHC.Num
+ , module GHC.Float
+
+ , module System.IO
+ , module System.FilePath.Posix
+
+ , module Data.Kind
+ , module Data.Void
+ , module Data.Bool
+ , module Data.Char
+ , module Data.Int
+ , module Data.Text
+ , module Data.Text.IO
+ , module Data.Text.Encoding
+ , module Data.ByteString
+ , module Data.Tuple
+ , module Data.Maybe
+ , module Data.Either
+ , module Data.List
+ , module Data.Function
+ , module Data.Eq
+ , module Data.Ord
+ , module Data.Semigroup
+ , module Data.Monoid
+ , module Data.Functor
+ , module Data.Bifunctor
+ , module Data.Traversable
+ , module Data.Foldable
+
+ , module Text.Show
+ , module Text.Read
+
+ , module Control.Applicative
+ , module Control.Monad
+ , module Control.Monad.IO.Class
+ , module Control.Monad.State.Class
+ , module Control.Monad.Reader.Class
+ , module Control.Exception.Safe
+
+ , tshow
+ , headMay, atMay
+ , throwLeft
+ , log
+
+ , Pretty(..)
+ ) where
+
+import Prelude (quot, mod, rem, quotRem)
+
+import GHC.Num (Num(..), Integer)
+import GHC.Float (Double)
+
+import System.IO (IO, stdin, stdout, stderr, FilePath, Handle)
+import System.FilePath.Posix ((</>))
+
+import Data.Kind (Type)
+import Data.Void (Void)
+import Data.Bool (Bool(..), otherwise, not, (&&), (||))
+import Data.Char (Char, isUpper)
+import Data.Int (Int)
+import Data.Text (Text, pack, unpack, unwords)
+import Data.Text.IO (putStrLn)
+import Data.Text.Encoding (decodeUtf8, decodeUtf8', encodeUtf8)
+import Data.ByteString (ByteString, readFile, writeFile)
+import Data.Tuple (fst, snd, curry, uncurry, swap)
+import Data.Maybe (Maybe(..), maybe, fromMaybe, isJust, catMaybes)
+import Data.Either (Either(..))
+import Data.List (take, drop, dropWhile, filter, reverse, lookup, zip, zip3, replicate, sortOn, concatMap, elemIndex)
+import Data.Function (id, const, flip, ($), (&), (.))
+import Data.Eq (Eq(..))
+import Data.Ord (Ord(..), Down(..))
+import Data.Semigroup(Semigroup(..), (<>))
+import Data.Monoid (Monoid(..), mconcat)
+import Data.Functor (Functor(..), (<$>), (<$), ($>))
+import Data.Bifunctor (Bifunctor(..), first, second)
+import Data.Traversable (Traversable(..), forM, sequence)
+import Data.Foldable (Foldable(..), any, all, mapM_, forM_)
+import qualified Data.Time.Clock as Time
+import qualified Data.Time.Format as Time
+
+import Text.Show (Show(..))
+import Text.Read (readMaybe)
+
+import Control.Applicative (Applicative(..), (<*), (*>))
+import Control.Monad (Monad(..), join, forever, mapM, forM, foldM, void, (>>=), (=<<), (>=>), (<=<))
+import Control.Monad.IO.Class (MonadIO(..))
+import Control.Monad.State.Class (MonadState(..), get, put, modify)
+import Control.Monad.Reader.Class (MonadReader(..), ask)
+import Control.Exception.Safe (Exception, SomeException, IOException, MonadThrow, MonadCatch, MonadMask, throwM, try, catch, catchIO, bracket, bracketOnError)
+
+tshow :: Show a => a -> Text
+tshow = pack . show
+
+headMay :: [a] -> Maybe a
+headMay [] = Nothing
+headMay (x:_) = Just x
+
+atMay :: [a] -> Int -> Maybe a
+atMay [] _ = Nothing
+atMay (x:_) 0 = Just x
+atMay (_:xs) n = atMay xs $ n - 1
+
+throwLeft :: (Exception e, MonadThrow m) => (b -> e) -> Either b a -> m a
+throwLeft f (Left x) = throwM $ f x
+throwLeft _ (Right x) = pure x
+
+log :: MonadIO m => Text -> m ()
+log msg = do
+ t <- liftIO Time.getCurrentTime
+ let time = Time.formatTime Time.defaultTimeLocale "[%F %T] " t
+ liftIO . putStrLn $ pack time <> msg
+
+class Pretty a where
+ pretty :: a -> Text
+
+instance Pretty Void where
+ pretty _ = ""