{-# LANGUAGE UndecidableInstances, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-} module Interlude ( module X, unsafeTail, unsafeHead, unsafeLast, unsafeInit , PShow(..), perror ) where import qualified Prelude import Protolude as X hiding ( (&), catch, throw, try, (<.>), wait, error, filter, ordNub , catMaybes, mapMaybe ) import Prelude as X (error) import Control.Monad.Catch as X (MonadThrow, MonadCatch, catch, throwM, try) import Control.Monad.State as X (modify') import Control.Lens.Operators as X import Control.Lens.TH as X import Control.Lens as X (view) import Data.Aeson.TH as X import Data.Aeson as X (ToJSON, FromJSON) import Database.Groundhog.TH as X import Data.Typeable as X (Typeable) import Data.Coerce as X import Data.Char as X import Data.Witherable as X import Data.String unsafeTail :: [a] -> [a] unsafeTail = Prelude.tail unsafeHead :: [a] -> a unsafeHead = Prelude.head unsafeLast :: [a] -> a unsafeLast = Prelude.last unsafeInit :: [a] -> [a] unsafeInit = Prelude.init class Prelude.Show a => PShow a stringLike where pshow :: a -> stringLike instance (Prelude.Show a, IsString stringLike) => PShow a stringLike where pshow = fromString . show perror :: StringConv stringLike String => stringLike -> a perror = error . toS