{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} -- | Commonly useful functions, a Prelude replacement. -- -- This is designed to be imported everywhere, unqualified (generally -- the only unqualified import you should use). -- -- Alpha can be opinionated and break with other Haskell idioms. For -- example, we define our own operators which have a pattern to their -- characters: -- -- - `|` normal function-level applications -- - `/` indicates doing something inside a functor -- - `<` and `>` indicate the direction in which values flow -- between functions -- -- It seems unnecessarily different at first but it makes things easier -- to read quickly. module Alpha ( -- * Re-export Protolude module X, -- * Applying (<|), (|>), -- * Mapping (/>), ()) import Data.String import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Lazy as LazyText import Protolude as X -- | Debugging printf say :: Text -> IO () say = putText -- | Alias for map, fmap, <$> ( (a -> b) -> f a -> f b ( (a -> b) -> f0 (f1 a) -> f0 (f1 b) ( b) -> a -> b (<|) = ($) infixr 0 <| -- | Reverse function application. Do the left side, then pass the -- return value to the function on the right side. (|>) :: a -> (a -> b) -> b (|>) = (&) -- | Alias for <&>. Can be read as "and then". Basically does into a -- functor, does some computation, then returns the same kind of -- functor. Could also be defined as `f >>= return . g` (/>) :: Functor f => f a -> (a -> b) -> f b (/>) = (<&>) -- | Removes newlines from text. chomp :: Text -> Text chomp = Text.filter (/= '\n') -- | Removes newlines from lazy text. lchomp :: LazyText.Text -> LazyText.Text lchomp = LazyText.filter (/= '\n') -- | Join a list of things with a separator. joinWith :: [a] -> [[a]] -> [a] joinWith = intercalate -- | can you just not don't :: Bool -> Bool don't = do not {-# ANN don't ("HLint: ignore Redundant do" :: String) #-} -- | Class for turning different string types to snakeCase. class CanSnakeCase str where snake :: str -> str instance CanSnakeCase Text where snake = Text.replace " " "-" . Text.toLower